Previous dereference implementation re-contains data as `dict` except
for the predicted type.
But the OrderedDict is not predicted, so the its data would be converted
`dict` implicitly.
As the result, the order of stored data get wrong. And this patch
prevents it.
changed followings.
- added optional parameter `container_class` which enables to choose
intermediate class at encoding Python data, instead of additional
field class.
- removed OrderedDocument class because the equivalent feature could
be implemented by the outside of Mongoengine.