key-value pairs should be encoded in the reverse order (first value and then key), so that the key terminator and the object terminator can be distinguished
implement blocking decoder
implement float32 support in encoder