Clarify some allowed behaviour to allow varint deserialization

Since custom functions can't be used in Deserialize implementations,
we have to use some existing functions in special ways.
Fix char support

Previously, this would call the visitor's u32 functions.
Remove useless closures
Add i128/u128 support using data<16>
Remove references to enum types
Add a few deserialization tests
Fix markdown formatting
Improve documentation
Add sanity checks for tuple deserialization
Clean up some repeated deserialization code
Add explicit i128 errors
Remove references to f16

They were removed from the upstream draft.