Model and submit API updates

NOTE: Not ready for merge because tests are incomplete, but I need to stop for the day, so sharing progress.

Changes to model and submit API that make submitting straightforward. Submission is the most common action, so I rewrote the model such that submitting doesn't need to change User or Assignment records.

Per Stephen's suggestions, all API code is back in api.py and the NDB interface is an object. Comments are welcome.

Testing is incomplete, but I won't get to finish it until tomorrow. 
It seems that the appengine datastore doesn't have good support for unique values of fields. Instead, they expect you to use the unique value as a key (which seems reasonable) and use the built-in get_or_insert to either retrieve an existing entity or create a new one.  Seems reasonable, but different from what we're doing currently.

Best we can do in this pull request is to add a TODO, I think.

Docs:
https://developers.google.com/appengine/docs/python/datastore/modelclass?csw=1#Model_get_or_insert
http://stackoverflow.com/questions/1185628/how-do-i-define-a-unique-property-for-a-model-in-google-app-engine