Fix async polymorphic belongsTo serialization

Closes #2551, Fixes #2385, Fixes #2508, Closes #1491

Very naive implementation, also I didn't change anything in the embedded mixin because I don't know how/if it's supposed to be handled.

When reading #1535, I'm assuming the serialization process stays synchronous.

I think this should be considered as a breaking change because even if the signature does not change, the passed record to `serializePolymorphicType` is the inverse record instead of the record itself.

cc/ @jherdman @igorT 
@sly7-7 Ahhh, makes sense now. Thank you for the explanation! I agree snapshots is the long-term fix, but this seems like a reasonable change in the short term to fix the issues people are experiencing.