Use better error messages instead of ErrUnavailable

When a session is closed it should not be possible to execute queries,
the error message for this is distinct to a live session which has
not connections.

If a live session has no available connections then indicate that
instead of the generic ErrUnavailable.
Use defer to unlock in session.go
Update test
Remove redundant iter nil check
Fixed TypeInfo's String() function, when type is a custom type.
Parse custom types in the org.apache.cassandra.db.marshal. namespace. This behaviour is not documented in the wire spec, however it is done by the python datastax driver
Add a test to ensure types are parsed correctly.
Remove check for available streams

A connection should be pickable even if no streams are currently
available. In this case, when executing the query, the connection will
block reading from the streams channel [see func (c *Conn) exec(...)]
until one is available.

This avoids 'unavailable' errors when there are more than
numConns*numStreams queries pending.
Merge pull request #158 from miguelvps/stream_unavailable

Remove check for available streams
AUTHORS: added Miguel Serrano
Merge pull request #143 from Zariel/better-unavailable-errors

Use better error messages instead of ErrUnavailable
Created the Connection Pool interface and converted the existing connection pool logic to a SimplePool interface.
Added an example of a SingleConnection pool to the ConnectionPool documentation.
Rebased branch. Fixed code that was altered from the rebase.
Made errorFrame an interface that can implemented by the different types of errors from a cassandra server.
Moved errorFrame and err constants to errors.go, added (*frame.)readError() errorFrame function
Updated conn.go to use new error syntax
Added test to ensure library can properly decode error response from cassandra
Run test suite against multiple versions of Cassandra
Merge pull request #163 from relops/supported_versions

Run test suite against multiple versions of Cassandra