Improve Context id generation and unit tests
Add unit test to ensure an Async only generates one id
Rearrange default _process_results function
Make Context call persist after task insertion

First pass at making Context call persist after inserting its tasks.  I
think this isn't quiet correct though.  Each Async needs told it should
be firing the Context's "check complete" function after running.
Probably this can be hooked into the Async's callback logic.
Split result processing logic out from run_job

Move result processing logic into its own function to clean up code and
make testing more reliable.
Add event hook for context check complete call

Add an event hook that runs after run_job in order to trigger a Context
completion check.
Add the containing Context.id to each contained Async

When an Async is added to a Context, add the Context's id to the Async.
The Context id is useful for reporting and grouping.
Correct _parse_yaml_config's handling of empty string

Correct _parse_yaml_config's handling of empty string to treat empty string
as an empty config object.  This will result in the default config being
returned if the empty string is passed in.  None will result in the
loading of the default config yaml.
Add a simple example of using Context callbacks
Update Async to support specifying a context checker

Add an internal '_context_checker' option to Async to facilitate Context
completion checking.  This is meant as an internal parameter only for
internal use.
Add unit test for correct _context_checker encoding
Pass whole Async to context checker

Instead of passing only the Async options to the context complete
checker, pass the entire Async.  This should enable the context checker
to take advantage of any methods defined on Async, particularly
customized Asyncs.
Add unit test for Async context checker encoding/decoding

Add a unit test that verifies Async context checkers get correctly
encoded to an Async options dict and that they are correctly decoded
from the same.
Add property to get context_id to Async

Add a property to get the context id, when set, from an Async.  If it
is not set, a NotInContextError will be raised instead.
Add simple ndb_persitence Context storage model
Update store_context signature to pass in the Context

Pass the whole context into store_context rather than just the id and
options dict.  This should be more flexible and extensible since helper
functions will be nicely exposed rather than digging into the options
dict directly.
Add simple store_context function to ndb_persistence
Add missing logging import to ndb_persistence
Add some helpful logging to ndb_persistence
Add internal persist marker function to Async