Rename variables id to idx, preventing shadowing of builtin

Also refactor some complicated list expressions into for loops
Add ability to set context.id and register new Contexts
Fix bugs in marker tree creation

Also add timing ability to markers, the difference between
created and updated. If a sub context is created without
callbacks it will attempt to load it's parent's callbacks.
Change Marker.from_async to directly create a marker from
an async instead of encoding to dict and back.
Add custom logger to enable change log level at just
this module. Change the result responder to output a
dict instead of the raw result, this allows for the
meta data of id and timing.