Add a Serialize#serializeData hook

In building an AMSAdapter it seems to me that determining the JSON root for serialization really belongs in the serializer.

I'm also working on a parallel hook for allowing customizing the extraction of payload keys.

This is a big issue when dealing with double-barreled names as currently ED is serializing with camelized roots.

My previous rootForType PR was premature as it actually just allowed customizing the pathForType, I believe rootForType still may need to be implemented, I'm trying to find a cleanish way to get AMS working straight out of the box. Pretty much everywhere type.typeKey is hardcoded throughout the Adapter & Serializer needs overriding.