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