Add requests requirement and make to_dict more robust

Tests were failing for me because of the new to_dict assuming that every entity has a key.  In particular, see trace below. Perhaps the deeper problem is that the test infrastructure doesn't create valid entities.

======================================================================
ERROR: test_entity_create_basic (test_api.AssignmentAPITest)
Tests creating an empty entity.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/denero/Documents/workspace/ok/server/tests/test_api.py", line 185, in test_entity_create_basic
    self.post_entity(self.inst)
  File "/Users/denero/Documents/workspace/ok/server/tests/test_api.py", line 100, in post_entity
    self.post_json('/{}/new'.format(self.name), data=inst, *args, **kwds)
  File "/Users/denero/Documents/workspace/ok/server/tests/test_api.py", line 89, in post_json
    data = data.to_dict()
  File "/Users/denero/Documents/workspace/ok/server/app/models.py", line 47, in to_dict
    result['key'] = self.key.id() #get the key as a string
AttributeError: 'NoneType' object has no attribute 'id'