DISCUSSION PR: Re-writing Entity to subclass object instead of dict.

This fixes #396, but I am happy to close it if there are issues with it. (Hence the **DISCUSSION** in the description.)

It is a first-step towards the discussion in #336 with @elibixby and @proppy.

The `Entity` class doesn't attempt to be a dictionary, rather it provides `__getitem__` (and `set` and `del`) semantics and `update_properties` and `clear_properties` methods for updating the properties and leaving the rest of the entity alone.

The long term goal is to provide a way to do something like:
```python
>>> e1 = Entity('SomeKind', 1, prop1=u'foo', prop2=u'bar')
>>> e1
<Entity[{'kind': 'SomeKind', 'id': 1}] {'prop1': u'foo', 'prop2': u'bar'}>
>>> e2 = Entity('SomeKind', 1, {'prop1': u'foo', 'prop2': u'bar'})
>>> e2
<Entity[{'kind': 'SomeKind', 'id': 1}] {'prop1': u'foo', 'prop2': u'bar'}>
>>> e1 == e2
True
>>> e_partial = Entity('ParentKind', 1, 'ChildKind', prop=True)
>>> e_partial
<Entity[{'kind': 'Parent', 'id': 1}, {'kind': 'Child'}] {'prop': True}>
```
and I think to get there this is necessary to separate the property data (as `_data`) from the other metadata.

I am still trying to figure out a way to squeeze in "special" keyword arguments like

- `key` (may be possible to just implement a method like `key.to_args()` so we don't need a kwarg. Or instead we could check if `len(positional_args) == 1 and isinstance(positional_args[0], Key)`)
- `dataset` (#444 may make this unnecessary if we take it a bit further and my [design doc][1] just says forget about it and set it on the key. Though the ID is still needed if we only have the key parts from `positional_args`.)
- `exclude_from_indexes` (as a power-user feature, it may not be necessary to put this in the constructor)

but that is outside the scope of this PR / discussion.

[1]: https://docs.google.com/document/d/1xKw8Tz6lfN5uOcv0my4uUgFSeDoRzwCLho2UGlBpqDU/edit
This feels *way* clumsy, compared to the old implementation.  What are we gaining, again?