Support passing string ids to the API during post

Allow a string id to be passed to the API for a given model like so:

```python
class Widget(ndb.model):
    foo = ndb.StringProperty()

    class RESTMeta:
        allow_id = True # this model now allows an 'id' to be passed in the API
```

Set the id during post like so:
```python
requests.post("http://example.com/api/widgets", data='{"foo": "bar", "id": "baz"}')
```
See that it worked like so:
```python
requests.get("http://example.com/api/widgets/baz").json()
# {u'next_results_url': None, u'results': [{u'id': u'baz', u'foo': u'bar'}]}
```


This also allows using those ids for KeyProperties where a kind is set.

Setting a KeyProperty follows these steps:
- If None is passed, None is assigned to the property
- If we succeed in using `ndb.Key(urlsave=value)`, that's what we assign to the property
- If the KeyProperty has a kind set, and the model associated with that kind has `allow_id = True`, use the string as the key (does not check for a valid instance in the datastore with that key)
- If none of those pass, return a 400 with a message that includes the bad key