Equality fixes

I've pretty much copied this from XUnit, but it should cover off the equality stuff that hasn't been covered since removing NUnit stuff for 2.0.

This existing test fails, and I'm not sure how to get stop that:
```[Test]
        public void ShouldBe_WhenThingsAreDifferentTypes_ThatOverrideEqualsPoorly_ShouldThrow()
        {
            Shouldly.Should.Throw<ChuckedAWobbly>(() => new Strange().ShouldBe("hello"));
        }