(dual as in - a notion of paired concepts that mirror one another.)

`getCollectionBasedProtocol()` returns an `InsertProtocol` which has a an `execute` method but not a `executeAsync()` making it look lopsided:

    getCollectionBasedProtocol().executeAsync(connection, transformer());

Seems nicer to me and mirrors the sync version. Also the `executeProtocolAsync(...` path misses out on the logging that happens in the sync version (but that may be a ticket for another day).