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?
Added tests for generic cases