Fixed directory cleaning helper test method

- must call TryRemoveDirectory, following recent changes to the Directory Layer
Fixed invalid exception test in AssertThrowsAsync<T> helper

- should be Is.TypeOf<T> and not Is.InstanceOf<T> because we want to match the exact exception type
Async iterator: made sure that all read of the state are volatile
Update all tests to use Assert.Throws<..>(async () => await ....)

- This now works in NUnit 2.6.3
- Removed TestHelpers.AssertThrowsAsync<T>
Added conditional assertions in Future callbacks handling code (enabled via #define DEBUG_FUTURES)
Made the DebugCounters class available in Release builds
Logging Filter: annotations, fixed closing of the log, ...

- Added tr.Annotate(...) to add comments to a log
- Show the retry attempts when OnErrorAsync gets called
- Better handling of the end of a transaction (via Commit or via Dispose)
- tweaked the metrics report even more
Message Queue Layer: fixed worker runloop, added log anotations

- still work in progress !
Sample runner: added performance counters, added 'mem' and 'gc' commands
Tweaked the leak test sample to attempt to reproduce a memory leak