Improve Gabbler actor architecture

In my experience the internal actor architecture often benefits a lot from introducing dedicated states that the actor moves through via `context.become`.
Same here. This improved design has neither vars nor ifs and therefore appears quite a bit more readable. It's also shorter...

Another benefit is that it's much easier to see "holes" in the logic. In this case I wasn't sure how timeouts should be handled in the `collectingMessages` state. Maybe you want to change something here.

(Also, tests would of course be nice... :)