Added Exception inheritance checking

Includes new ExceptionInheritanceOptions enum to match the existing
ExceptionMessageCompareOptions

Added AssertExceptionNotInherited<T> to ExceptionAssert and use from
AssertExceptionType<T>

Updated unit tests in ThrowsTests.cs to include tests for what happens
both with and without the new option; existing calls should work as
they were so that nothing that depends on this library breaks.

By passing ExceptionInheritanceOptions.Exact to any of the Throws
methods, the code checking the exception type will take the time to
verify that the thrown exception is not an exception type that
inherits the specified exception type. For example, this means that
you can now clearly ask for an ArgumentException without the assert
passing when an AssertNullException is thrown.