Simplify down some of the states
Cleanup the decoder types
have different value types for encoding and decoding
Replace Decoder with Iterator<Value>
Support LL(1) by adding Decode.decode_with