Refactored Or to accept Func tests to specify when Or should choose the value over the object. Original methods still exist as well for compatability.

Added FirstOrValue and SingleOrValue which works like First/Single combined with Or

Refactored Require to be easier to maintain. All filter through Require<T>(predicate) for testing