Fix gremlin timeout handling

This reorganises gremlin sessions into two type: Session and worker. Session handles public facing activity and management of the session worker. The demarcation of roles allows a clearer communication of timeout state, reducing the necessity of mutexes and chan communication.

Fixes issue #102.