change all core functions to return `{:ok, result}'/`{:error, reason}' and add `!' variants
that return `result' or throw an exception
fix tests to work with new return conventions
first pass at elixirfying the README
rudimentary support for encoding records