DuplicationDetection and ConcurrencyConflictCheck uses dedicated HashSet to improve InMemory Performance

This pull trades memory consumption in favor of performance. My personal point of view is that it is more important to have good performance than saving a lot of memory in the in memory persistance. In the end the performance also matters here because this greatly improves the execution time of the tests relying on the in memory persistance. I ran some analysis on the current master and detected that a 94% of the time is spend in the duplication detection. This uses an Any() clause which gets extremely inefficient the more items you have in the persistance. This pull add an aproximate overhead of 2% memory consumption but improves the performance in order of magnitudes:

![performance](https://f.cloud.github.com/assets/174258/1360418/7a1f96fe-37f5-11e3-971c-ce1ecb155acf.png)

So with 40000 events the performance is now 67 times better than before!

Here are the perf and memory snapshots from my machine:

https://dl.dropboxusercontent.com/u/9580212/NEventStorePerformance.zip

My machine has the following specs

![2013-10-18 14_59_56-system](https://f.cloud.github.com/assets/174258/1360409/4199ffcc-37f5-11e3-8803-64af777b1ea9.png)

I have a SSD drive in my notebook.