Tuple Layer: added support for System.Net.IPAddress in tuples

- Serialized as a byte array to preserve ordering.
- Added converters to also autocast strings, longs or guids into an IPAddress
Table Layer: added a unit test to demonstrate using a custom key encoder
Fdb.Bulk refactoring: renamed "ReadBatchedAsync" into "ForEachAsync" to prevent some misunderstandings into what it does, and added AggregateAsync()

* ForEachAsync is used to run a void-returning, retryable async operation on a source of elements using an adaptive batch size
* AggregateAsync is the same, excepts that it can return a final result
* the state *must* be immutable (ie: longs, readonly structs, or Immutable collections)