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
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
feat: Property type error includes name of property
test: Refactored test suite

Refactored test suite and added tests for all newly added functionality
feat: Can pass in KindDefinitions instead of String

All public API methods in the mirrorfree version of the library
accept either:
- A String
- A kind definition

when passing a Kind into the method
feat: Type literal kinds

All methods which expect a kind definition can accept a Type literal
when using the reflective API
chore: bumped version
Merge pull request #27 from ovangle/0.3.4

0.3.4