Refactor Client code

- Slit the Client API and Engine into separate parts.
- Provide separate Threading and Gevent based implenentations of the Engine.
- Expand the API with convienence wrappers for the most useful Tab types.
- Also, make transport gevent agnostic.
Make the Handler registry configurable