message: Update sled-storage::update_data not to return error on not-existing key inputs
  as-is: update_data returns error if not-existing key comes as input param.
  to-be: if key does not exist in the storage, it works as insertion mode. now the data is inserted rather than error.
diff: @@ -212,10 +212,8 @@ impl StoreMut for SledStorage {
  for (key, new_row) in tx_rows.iter() {
  let key = IVec::from(key.to_cmp_be_bytes());
  - let snapshot = tree
  - .get(&key)?
  - .ok_or_else(|| IndexError::ConflictOnEmptyIndexValueDelete.into())
  - .map_err(ConflictableTransactionError::Abort)?;
  + let snapshot = match tree.get(&key)? {
  + Some(snapshot) => {
  let snapshot: Snapshot<Row> = bincode::deserialize(&snapshot)
  .map_err(err_into)
  .map_err(ConflictableTransactionError::Abort)?;
  @@ -228,12 +226,22 @@ impl StoreMut for SledStorage {
  }
  };
  - bincode::serialize(&snapshot)
  + index_sync.update(&key, &old_row, new_row)?;
  +
  + snapshot
  + }
  + None => {
  + index_sync.insert(&key, new_row)?;
  +
  + Snapshot::new(txid, new_row.clone())
  + }
  + };
  +
  + let snapshot = bincode::serialize(&snapshot)
  .map_err(err_into)
  - .map_err(ConflictableTransactionError::Abort)
  - .map(|snapshot| tree.insert(&key, snapshot))??;
  + .map_err(ConflictableTransactionError::Abort)?;
  - index_sync.update(&key, &old_row, new_row)?;
  + tree.insert(&key, snapshot)?;
  if !autocommit {
  let temp_key = key::temp_data(txid, &key);
  