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 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"));
        }