Mongoengine taskstatus

This contains -

1. Schema definition for TaskStatus inherited from mongoengine.Document
2. Added fields.py to define custom fields used in pulp that are not available from mongoengine.
3. Updated save method on TaskStatus to do the validation of fields as well as upserts.
4. Updated task status manager with mongoengine queries
5. Added and updated unit tests in various files as appropriate.
6. Enabled a bunch of unit tests in test_dispatch.py which were not running because of wrong test names.

Since there are a lot of in-place changes, pull request diff looks confusing at some places. It is better to look at the whole file instead of the diff. 
ATOMIC:


The task state must be updated to ACCEPTED only when it is currently WAITING as an atomic operation in the DB.  This must be *atomic* because of race conditions caused by multiple threads/processes handling agent replies.  These replies can processed out of order based on kernel process swapping under head load.

This code appears to be:
1. reading
2. updating

which will be vulnerable to race conditions.

Also, a MissingResource is raised when a task is not found in the expected state which I really don't think is appropriate here.