Fixes issue #326 - Argument Constraints should support derived types as Type Arguments

Fixes issue #326. The fix will only invoke the predicate if the type matches or if the argument is null. For non-nullable types it will always just use the branch ``` argument is T ```.

The new unit tests should cover 100% of branches. Is there anything I need to update in FakeItEasy.Specs? I'm not too familiar with that stuff.
will update, thanks!