Changed read/write handler configuration format.

My initial read/write handler syntax wasn't particularly friendly.
Involved too many lists & tuples, when the syntax & tools of dicts are
probably a lot better for this purpose.

So, I've switched to a unified dict format of {type: handler} where the
handlers can deal with both reading and writing.  A handler doesn't have
to deal with both, it can just implement either a reader or writer
interface.

A reader also needs to implement a tag function, which it
wouldn't under plain transit-python, but is required to determine the
tag to use when reading.

Other than that the interface for the reader and writers is basically
the same as transit python.
register_handlers fn to add handlers after init

The register_handlers function should allow an application to add extra
handlers to an already transit enabled application.

This could be used if an application doesn't have access to all it's
handlers at the time init_app is called, or could be used by transit
python plugins that need to provide their own initialization outside of
calling init_app.