Do not marshal the padding constants.
Handle type level stuff correctly.

This change makes it possible for the system to handle the Type parameter correctly, and store multiple blocks with differing types. At this point, the protocol should be rather complete in the backend.
Include the `crypto` application in the dialyzer run and correct calling convention.
Fix call to `eleveldb` for reads.
Let errors return `atom()` values instead of returning strings.

This makes it easier to pattern match on errors and formatting can happen higher up the translation chain. While here, parse incoming (decoded) errors strings as proper errors.
For convenience, provide erlang-local `read/3` and `write/2` operations.