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?
It's indeed quite several classes but I think in this case it's better to have things match reality as closely as possible. If reality *also* typically has these generic patterns then I think it would certainly make sense to *also* thus have this generic pattern be tested.