FAM-85 MapField Backport Repair

Frankenstein's monster WIP. Backported lots of code from 0.5.x branch of
mongoengine upstream. Original tests pass, but MapField tests do not. Some
validation may be missing, and invalid mapping may not be guarded against.

ComplexBaseField and inheritance, necessary for MapField, touches
everything. Use with caution.