Refactored the User domain object.

 - toString, hashCode and equals methods implemented
 - Preconditions used to ensure Users cannot be instantiated with null params