Fix batcher test to be aware of the id
Replace direct access of id w/use of @property
Fix test to see id
Add Class Marker manage state of Context completion

When a Async's of a Context are processed, they need to mark
they are done and the process can check if it's sibling tasks have completed,
Marker represents that state. We also want them to be split up
into groups to keep the number of siblings that have to be
checked for to a low number. This process requires a graph to be created
and Marker also represents the state of the whole graph and
it's internal vertexes.
Add enough of Marker to pass one test

The staticmethod Marker.do_any_have_children checks a list
of Marker instances for ids in their children property.
It will now pass test_do_any_have_children, everything
else is WIP.
Change children property to a @property
Add Marker serialization tests and code to pass them

A Marker's children property can contain either ids or actual
Marker instances, but it would only ever have one or the other.
When a Marker graph is generated to split up a bunch of Asyncs
belonging to a Context, a root Marker will be returned with Markers
as children, but when a marker is created from an individual Async or
retrieved  from the persistence layer via Marker.get, children will be IDs.
Rename a method to be more explicit
Add tests for Marker.get_group_id
Add test of Marker and Marker graph persist

Using the default ndb persistence layer
Tests create Marker tree graphs and persist them
then attempt to load them, asserting their existence
or lack thereof. When a Marker tree graph is saved,
the leaf nodes are not saved.
Test also persist leaf nodes and then load them and
assert their existence and important properties.
Test for exception raising during illegal states to persist in.
Add code to pass tests except for
test_persist_tree_after_tasks_inserted which require a change
to Context that is forth coming.
Convert Context to take options kwargs.

To facilitate future extensions, switch from named insert_tasks
injection parameter to fetching it from options.  This will keep the API
cleaner as additional injection points are added.
Add `id` to Context.

`id` will be used to group asyncs withing the Context and also to
facilitate access to the Context's state once persistence is
implemented.
Add descriptions to tests
Move marker persistence call to inside update_done

This will allow handle_async_done to persist the marker.
It would have failed otherwise
Add test for the completion of a tree graph

Tests that when the final marker is done and marker.update_done is
called, the root marker will be marked as done and count_done will be
called a certain number of times.
Fix test to check for proper count, Tests pass

Add document to test illustrating the count each marker
has update_done called with explanations.
Add Test the number of times each marker is persisted
after the initial persistence of the graph. Change code of
completion_marker module to pass tests
Add test to verify the success callback called

Add test to verify the success callback is called
only once. Code already passes
Add callbacks to root and internal vertexes to test

During a marker.update_done it will check for and call specific
callbacks to combine results of child markers together. The
Marker tree construction in the test includes setting the proper
initial state of the root and internal vertex markers. It might be
better to have the properties
'all_children_leaves' and 'internal_vertex' infer their own values,
but for now the logic that builds the marker tree will do it.
Add Test to ensure combiners are called

Adding this test required adding few methods to Marker
including children_markers to return a marker's child Marker instances
even if the marker only has ids in it's children property.
Marker.get_multi to fetch markers by a list of ids.
_persist_whole_graph for testing purposes to save a whole marker tree without
needing to go through the update_done process on each.
marker.is_leaf to detect if the marker is a leaf.
_list_of_leaf_markers to load a list of leaf markers in the marker tree.
Test for each of these methods.
Finally changes to marker.update_done to pass test, a major part of
it being if a leaf is replaced with a sub-tree, the correct combiner must
be used.
Remove two unneeded properties

marker.internal_vertex and marker.all_children_leaves are no
longer need because of a change in logic that uses
marker.is_leaf instead.