more decoding

More decoding enhancements. This PR changes the internals of `JSON.Decode.from_json` in the following ways:

 * `consume_value/1` returns a `{ any, binary }`, where the second item is the unconsumed end of the input. This is needed for parsing nested Objects and Arrays
 * `from_json/1` raises an exception if there is any unconsumed input at the end after all parsing is done
 * The various `consume_value/1` definitions each delegate to one or more `consume_[type]` functions of various arity

Tasks:

 * [x] decode `null`, `true`, `false`
 * [x] decode basic strings
 * [x] decode strings with escape characters
 * [x] decode basic numbers
 * [x] decode numbers with exponents
 * [x] decode basic and nested arrays
 * [x] decode basic and nested objects

In a future pull request:

 * [ ] `JSON.decode` only accepts UTF-8, per JSON spec
 * [ ] `JSON.decode` works with `Stream`s