title: FluentAssertions fails when comparing objects if one property is nullable
body: <p>Scenario: I have an object with a nullable property that will be updated when I run the method under test. In the expected object, I don't specify it, since I want to validate the value separately. Here is a simple test demonstration</p>
  
  <pre><code>using System;
  using FluentAssertions;
  using NUnit.Framework;
  
  namespace FluentAssertionsNullableFailure
  {
      public class SimpleWithNullable
      {
          public Int64? nullableIntegerProperty
          { get; set; }
  
          public string strProperty
          { get; set; }
      }
  
      [TestFixture]
      public class Demo
      {
          public SimpleWithNullable actual = new SimpleWithNullable { nullableIntegerProperty = 1, strProperty = "I haz a string!" };
          public SimpleWithNullable expected = new SimpleWithNullable { strProperty = "I haz a string!" };
  
          [Test]
          public void NullableTest ()
          {
              actual.ShouldBeEquivalentTo (
                  expected,
                  opt =&gt; opt.Using&lt;Int64?&gt; ( c =&gt; c.Subject.Should ().BeInRange ( 0, 10 ) ).WhenTypeIs&lt;Int64?&gt; ()
              );
          }
      }
  }
  </code></pre>
  
  <p>However, this fails with the following message:</p>
  
  <pre><code>Test Name:  NullableTest
  Test FullName:  FluentAssertionsNullableFailure.Demo.NullableTest
  Test Source:    c:\Users\ebelew\Documents\Visual Studio 2012\Projects\FluentAssertionsNullableFailure\FluentAssertionsNullableFailure\Demo.cs : line 25
  Test Outcome:   Failed
  Test Duration:  0:00:00.271
  
  Result Message: 
  Expected property nullableIntegerProperty to be &lt;null&gt;, but found 1.
  
  With configuration:
  - Select all declared properties
  - Match property by name (or throw)
  - Invoke Action&lt;Nullable`1&gt; when info.RuntimeType.IsSameOrInherits(System.Nullable`1[System.Int64])
  - Invoke Action&lt;DateTime&gt; when info.RuntimeType.IsSameOrInherits(System.DateTime)
  - Invoke Action&lt;String&gt; when info.RuntimeType.IsSameOrInherits(System.String)
  Result StackTrace:  
  at FluentAssertions.Execution.LateBoundTestFramework.Throw(String message) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Execution\LateBoundTestFramework.cs:line 25
  at FluentAssertions.Execution.CollectingAssertionStrategy.ThrowIfAny(IDictionary`2 context) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Execution\CollectingAssertionStrategy.cs:line 57
  at FluentAssertions.Execution.AssertionScope.Dispose() in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Execution\AssertionScope.cs:line 267
  at FluentAssertions.Equivalency.EquivalencyValidator.AssertEquality(EquivalencyValidationContext context) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\Equivalency\EquivalencyValidator.cs:line 55
  at FluentAssertions.AssertionExtensions.ShouldBeEquivalentTo[T](T subject, Object expectation, Func`2 config, String reason, Object[] reasonArgs) in d:\Workspace\Github\FluentAssertions\FluentAssertions.Net35\AssertionExtensions.cs:line 497
  at FluentAssertionsNullableFailure.Demo.NullableTest() in c:\Users\ebelew\Documents\Visual Studio 2012\Projects\FluentAssertionsNullableFailure\FluentAssertionsNullableFailure\Demo.cs:line 25
  </code></pre>
  
  <p>How can I do this with the Options context, as opposed to splitting it into two or more assertions. (One assert for common properties, one each for item with a range or desired value instead of strict equivalence)</p>
  
  <p>Note: This also fails on reference types without an explicit value in the <code>expected</code> object.</p>
  
  <p>Note+: I've tried ExcludingMissingProperties(), it doesn't change the error. </p>