Fix cross-command cancellation bug

Cancel will now only work if the command is actually being executed.
Previously, if you had two commands, calling cancel on one could cancel
the second (see test).

Introduced a state mechanism into NpgsqlCommand to manage this.
Merge pull request #356 from roji/cross_cancel

Fix cross-command cancellation bug
Removed classes for simple client messages

Previously, sending a message to the backend involved instantiating
a class, and calling its WriteToStream() method; the instance would
then be thrown away. This caused needless instantiations for a great
deal of messages, and made the workflow more complicated than it
needed to be.

Moved the actual wire-writing code to NpgsqlConnector. This commit
refactors the simple message types: Cancel, Describe, Execute, Flush,
Parse, Password, Startup, Sync.

Relates to #308
Improvements to binding

- We were allocating and managing bound parameter values and format codes lists
  inside NpgsqlBind. Refactored this into NpgsqlParameter - each parameter manages
  their own binding data, reduces allocations and simplifies code.
- Removed NpgsqlBind class (see previous commit)
- Relates to #308
Removed class for NpgsqlQuery

- Removed class instantiation for NpgsqlQuery message (see previous commits).
- New QueryManager handles the details of writing queries to the wire and to
  pre-build some commonly-used queries for efficiency.
- Relates to #308