Updated Invariants

Changed invariant interface so that implementations must handle throwing of InvariantViolationException, to better support nesting of invariants
Renamed InvariantOn<TSubject> to IIInvariant<TSubject>
Added InvariantFor<TSubject> abstract base implementation of IInvariant<TSubject>