Non-IEnumerable backend message processing

Async will be incompatible with our current yield-based
method of processing backend messages. Converted it to
a simple ReadMessage() which returns a single message
each call, and wrapped it in a provisional yield-based
layer for now.
Replaced ProcessAndDiscardBackendResponses with Consume

Implemented over non-IEnumerable ReadMessage
Replace remaining yield-based backend processing
Basic hand-written async path working

Provisionally implemented async path for ExecuteReaderAsync() and
ReadAsync() all the way down, written by hand. Unit test works.
Auto-generate async counterparts to sync operations
Switched from single-byte to buffer reading

NpgsqlConnector was calling ReadByte(), this has no async counterpart.
Defined a byte buffer (with an arbitrary size for now) for use for all
socket read operations.
Added missing [GenerateAsync] on GetReader
Added type-excluding for async generator

For some types we never want to rewrite to async (e.g. TextWriter)
Fixed some non-rewritten GetReader invocations

System.Data needed to be referenced in order to bind them properly
Async speed tests
CancellationToken support for Execute*

NpgsqlCommands.Execute* methods now properly support CancellationToken's protocol.
When cancellation is signalled through the token, a Postgresql cancellation message
is sent. The resulting NpgsqlError is translated to an OperationCanceledException.
Fixed some bugs

Introduced in c8d0b935d1cef429bbbb5a9a2ad258dab7bbb92d
Commented out all async in .NET 4.0 build config

Solution now builds and passes all tests on .NET 4.0 as well, with no
async support.

We can provide async support in .NET 4.0 later with Microsoft.Async,
although that would mean external dependencies not necessarily wanted
by the user (for .NET 4.0 only)
Fixed write/flush ordering bug
Auto-build AsyncGenerator from Npgsql if doesn't exist

Although it's required for the build process, the AsyncGenerator project
cannot be regular dependency of npgsql, because it would get distributed
with Npgsql. However, we want a AsyncGenerator to get build if necessary,
so that the build process can remain simple (e.g. fresh clones work).

Added a check in the Npgsql project to see if AsyncGenerator has been
built, and if not, builds it.

Warning: this will not rebuild if AsyncGenerator is out of date, only if
it hasn't been built at all.
Async writes in async mode

Previously had only async reads
Removed bad project configs

Accidentally introduced in c8d0b935d1cef429bbbb5a9a2ad258dab7bbb92d
COPY works again

In a non-optimal way though (see TODO)
Add WithOverride option to AsyncGenerator
Modifications in Command and Reader surface methods

- Rearranged async and non-async surface methods to call a common *Internal
  method (async-generated)
- Made ExecuteReader() vs. ExecuteDbDataReader() more ADO.NET-correct. According
  to the contract you're supposed to only override ExecuteDbDataReader() and leave
  ExecuteReader() alone (the framework will call ExecuteDbDataReader()). Made the
  flow more like this.
- Added some .NET 4.5 AggressiveInlining attributes