Circular reference detection

A basic way of avoiding stack overflows with circular references in a
type hierarchy. Looks a bit messy but I have a feeling it can be
refactored into something nicer. Related to #20
Also this works:

```csharp
        private class TestParent
        {
            public TestChild Child { get; set; }
        }

        private class TestChild
        {
            public TestParent Parent { get; set; }
        }

        [TestMethod]
        [ExpectedException(typeof(InvalidOperationException))]
        public void RecursiveFill_RecursiveType_Fails()
        {
            var filler = new Filler<TestChild>();
            filler.Create();
        }
```