Support maps with arbitrary keys (other than String)

* Introduce KeySerializer which is a serializer that converts a parametric type into/from a String 
* Add ability to add your own key serializers in formats
* Default support for different types of integers (long, short, int, java versions of those), symbols, dates, and timestamps
* Use custom key serializers when none of the above types apply
* Test coverage/examples in MapSerializationExample