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
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