Refactor BinaryLogClient into an abstract base class to allow for more flexible use

Addresses https://github.com/shyiko/mysql-binlog-connector-java/issues/15

Roadmap to this patch:

1. Most of the code in `BinaryLogClient` has been moved to a `AbstractBinaryLogClient` superclass.
2. `AbstractBinaryLogClient`, instead of using the listener classes, delegates lifecycle and event handling to abstract methods.  
3. `BinaryLogClient` implements these abstract methods just like it did originally, and its behavior is therefore unchanged.
4. All unit tests pass.
5. I ran the integration tests under MySQL 5.6.12, and found that the tests have a couple of timezone/DST bugs.  I fixed one of those but not the second one, which I just flagged with a comment.
6. Checkstyle passes.