Avoid model id collisions when two types have the same name

This PR provides a solution for the problem @liddellj mentioned in the comments:
```csharp
public static string DefaultModelId(this Type type)
{
    // TODO: This won't scale as you'd get collisions between types with the same 
    // name but different namespace. Could use FullName, but that's a bit fugly. 
    // perhaps this is a reasonable default but the DSL could provide a facility for 
    // overriding a given model's ID?
    return type.Name
}
```
[Ofcourse](http://www.wikiwand.com/en/Murphy's_law) I ran into this problem immediately when trying Nancy.Swagger with some codebase.
I agree returning <code>type.FullName</code> is not very pretty, so instead I renamed <code>DefaultModelId</code> to <code>ResolveModelId</code>. It returns the <code>type.Name</code> if it wasn't resolved by some other type with the same name first. Else, it prepends the last part of the type's namespace and checks again.

So
```csharp
Console.WriteLine(typeof(SomeNamespace.MyType).ResolveModelId());
Console.WriteLine(typeof(OtherNamespace.MyType).ResolveModelId());
```
will output
```csharp
MyType
OtherNamespaceMyType
```

The one thing I'm not very happy/sure about is it introduces state (<code>_resolvedModelIds</code>) in <code>SwaggerExtensions</code>.