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
Merge pull request #143 from Zariel/better-unavailable-errors

Use better error messages instead of ErrUnavailable