Circular dependencies check

@halter73 the flag idea doesn't work because we can get a deadlock when services are requested from multiple threads - I had to use a collection instead.

There might be a perf hit, that's why I'm waiting until Monday so that @troydai can have a successful perf run before my checkin.

Fixes https://github.com/aspnet/DependencyInjection/issues/131

@halter73 and @loudej can you please review?
The amount of classes in DI Fakes is getting pretty large, consider just one generic class for all of these these:

```
public class RoundAndRoundWeGo<TDependency> {
    public RoundAndRoundWeGo(TDependency obj) { }
}
```
Granted this introduces a slight variation of generics, and you lose the description in the class name (but the test name should be enough), for saves adding 7-8 more classes