feat: Implemented kind inheritance

A kind can now have subkinds which are stored in the same datastore
entity as the kind.
chore: Bumped version
chore: Fixed protoc_plugin dependency

The dependency has changed names since last version
feat: Subkind now found via reflection
chore: bumped version
feat: Added clearKindCache method
refactor: Clean up insert method
bug: Create schema entity fails

Creating the schema entity failed since the kind was being inferred
from the key kind, rather than the subkind

Also, wrapped commit transaction in future to prevent exceptions
from leaking from the chain
chore: Added check for null entity factory
bug: Filter now respects subkinds

Previously filter would ignore the subkind of the entity, resulting
in spurious 'NoSuchProperty' errors
test: Tests now passing
chore: Bumped version
Removed .DS_Store from repostiory
Added datastore.list method

For listing all entities of a particular kind on the datastore
bug: Default optional property values broken
feat: Support listing all instances of a particular subkind
bugfix: cannot 'remove' file.

Method is named `delete`, so `build.dart --clean` would fail with an
error
bug: Sync exception occurred in `datastore.allocateKey`

Synchronous exception could be thrown in asynchronous method
`datastore.allocateKey`, which could mean lost exceptions
refactor:  rewrote 'withTransaction` method.

No functionality changed, but method implementation much cleaner
than before
feat: Added foreign key cache and utility methods

- `getForeignKeyProperty` returns the datastore entity associated
with a given foreign key property, from an instance cache if necessary.

- `setForeignKeyProperty` sets the value of a foreign key property
from an entity instance, updating the cache on set.

- `setProperty` clears the cache for the given property