Use Exceptions instead of errors, remove Auth object

- Convert from using true/false return values to using exceptions to indicate specific error conditions

- Remove the top-level Auth object entirely. All login/logout logic now encapsulated by Adapter objects, as well as the "resume" logic.  The adapters now take a User object and modify it directly as part of the login/logout/resume.

- Remove AdapterFactory and place its methods into the AuthFactory.

- Place Timer in the Session namespace.

- Update tests.