Unit test for #158 (prepared stmt leak)
Deallocate prepared statement on Dispose()

Note that this only happens in explicit Dispose()/
using, and not when Dispose() is called from a
finalizer (implementation for that is complicated).

Regardless, all prepared statements are automatically
deallocated when a connection is returned to the
connection pool (DISCARD ALL).

Fixes #158
Prevent another prepared stmt leak

When a prepared command is re-prepared, the first
backend statement was not deallocated.

Noticed by @franciscojunior