Reworked how exceptions flow between source and targets and inside the async pump

- Maybe<T> can hold either an error or an ExceptionDispatchInfo, depending on  what is easier/better for the callstack
- Pump will throw back the exception at the caller if it stops due to early failure
- PumpAsync takes "stopOnFirstException" to stop accepting errors after the first one
Added helper class Buffer<T> to optimize ToListAsync and ToArrayAsync

- store a list of chunks to reduce the number of reallocation with big numbers of items
Added TakeWhileAsync(...) and AggregateAsync(...) LINQ operators

- TakeWhileAsync(): Return the items in the source sequence as long as the condition is true, then stops.
- AggregateAsync(): used to compute aggregates (max, min, count, sum, average, ...)
Exposed most of the members of FdbTransaction in IFdbReadTransaction, and decorared interface with comments
Aligned the spelling of "Canceled" with the one in the .NET Framework API

- see "Cancelled vs. Canceled" http://grammarist.com/spelling/cancel/