#25. Refactored user login into a use case object.

Also moved things around to keep packages manageable.