Change Gabbler's behavior from using mutable state to become-based state machine
Add timeout parameter