Refactoring: Pass data to backend, and wrap errors.
Refactoring: Pass data to backend, and wrap errors.

* Pass raw data instead of pre-serialized payload to backend. This
  allows different processing depending on the backend (e.g. leverage
  the schemaless structure of DynamoDB).
* Wrap errors instead of silently casting them.

ic/mark0