Fix for #124 (.Should().BeEmpty() causes multiple enumerations)

Fixed the implementation of `BeEmpty()` and added a unit test to cover this case. Also added similar tests for `NotBeEmpty`, `BeNullOrEmpty` and `NotBeNullOrEmpty`; they were already working fine, but the tests will ensure a similar bug is not introduced in those methods.