Binary and SASL support

Done by making Connection an abstract class and moving some of the old
code into ConnectionAscii for the ASCII protocol. New class called
ConnectionBinary contains the binary protocol implementation.

SASL support is implemented in Connection so you can choose to use ASCII
but authenticate via SASL (which uses the binary request format).