Add support for Symbol and Map[Symbol, _]

Symbols are Strings that are guaranteed to be interned. They're especially useful as Map keys as they allow constant-time equality checks (improving collection search performance) and ensure recurring field names are shared, reducing load on the old-gen considerably when working with large numbers of long lived Maps.

I'm not too happy about all the special-cased Map Deserializers - I feel that this could probably be generalized somewhat, certainly for String vs. Symbol keys.

Similarly, I'm sure the implementation for MapSerializer can be more generic, but I didn't want to be too invasive.