Fix backend protocol version fallback bug

NpgsqlNetworkStream.Dispose() no longer tries to close its Connector unless the Connector has been explicitly attached to it.
Save the NpgsqlNetworkStream on Connector so it can be attached after successful startup.
Cleaned up CloseState.Open().
NpgsqlConnectionStringBuilder

NpgsqlConnectionStringBuilder now defaults to protocol version Unknown.
Make sure NpgsqlConnectionStringBuilder never writes "<key>=<empty value>" to a connection string.
Add a constructor NpgsqlConnection(NpgsqlConnectionStringBuilder)
Store password bytes in an encapulation that wipes old password out before storing new one.
Remove most of the defaults; initialize the private fields instead.
Don't put values into base unless they are different from the value default, and also from that type's default value.
Streams

Fix typo of stream name.
Eliminate need for explicitly creating a delegate.
Change Connector.Stream type to BufferedStream, which is what it always is.
Add test for prepared queries with bool parameter.

This test was created based on a report from Andrus Moor in the help forum:
http://pgfoundry.org/forum/forum.php?thread_id=15672&forum_id=519&group_id=1000140
Boolean binary backend encoding fix

Send proper byte[] values for binary encoded boolean parameters.
Expand new boolean parameter tests to include non-prepared, prepared, and prepared with suppressed binary.
Mark TestBoolParameterPrepared2() ignored, as it is out of scope for this branch/fix.
Merge pull request #93 from glenebob/false-parameter-value-passed-as-true

Boolean binary backend encoding fix
Merge pull request #94 from franciscojunior/false-parameter-value-passed-as-true

Boolean binary backend encoding fix. By Glen Parker
Merge pull request #83 from glenebob/pv_fallback_bugfix

Fix backend protocol version fallback bug
Comments added for clarification.
Shortened unit test run time

ExceedConnectionInPool waited on the default 15 second
connection timeout, reduced to 1 second
Connection string builder

Add a class to describe a connection string value, which handles default values and some conversions.
All values now get a descriptor with defaults.
Remove field initializers, set all defaults using descriptors.
Eliminate some redundant keyword table lookups.
Simplify and make more efficient SetValue().
Get values via this[] directly from the private fields rather than base class storage.
Merge pull request #85 from glenebob/connection_string_builder_2

Connection string builder
Merge pull request #97 from roji/shorten_test

Shortened unit test run time
Bind

Optimize bind to cache message length.
Only convert parameters for bind if needed.
Do not Sync() after writing Bind to the wire; wait until after Execute.
Prepare and query

Remove unneeded Sync()'s.
BindComplete response should not yield, as it gives us no information we can use.
Optimization and cleanup

Rearrange and cleaned some of the extended query code for better readabliity and consistency.
The Flush and Sync messages are now singletons, available by their static Default fields.
The Describe and Execute messages now live across many Executes without change, and set _messageLength at constrution.
No need for the Parse message to live outside of Prepare().
Organization and cleanup

Improve OO design of NpgsqlDescribe by splitting it into an abstract base class and two sub classes.
Split NpgsqlState by moving the two backend response handlers into their own files.
Fix BackendEncoding.UTF8Encoding to be readonly.
Minor cleanups.
NpgsqlError

Fix bug that would cause NpgsqlError to stop reading error fields prematurally if it encountered a field type it doesn't understand.
NpgsqlError

Use enum for error message field codes.
Restructure the message reader so the null terminator is handled in a more obvious way.
Organization, cleanup, and optimization

The Flush command is never used anymore, and it is easily confused with Stream.Flush(); remove support for it.
Simplify and mske more consistent some of the query pathways.
Avoid calling Stream.Flush() in multiple locations; call it in ProcessBackendResponses() instead.
Remove a bunch of redundant/unused code.
The two Process*BackendResponse*() functions are now the only entry points into that functionality.
NopgsqlQuery now constructs with a connector and query text (byte[] or string).
The "unknown" type supports binary decoding now.
cancelRequestCalled parameter is never set true; remove it.
Optimize ExecuteBlind() a little more.
Make sure to block the notification thread before writing query messages to the wire.