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
bug: Check for list property indexation

No check was made internally to the library to check for list property
indexation. List properties in the datastore cannot be indexed
feat: Improved rpc error message handling

- Connection now prints a more informative error message when an RPC
  exception is raised
bug: Commit rollback couldn't be called

Due to a typo in the `rollback` rpc, an invalid response would be
raised when trying to rollback a commit