Store auth provider  details

This PR contains refactoring of the Authentication Provider layer and enhancements as follows:
- Introduces an object hierarchy to represent a generic(abstract) `AuthencationProviderUser` and then sub-classes for `RelayUser', `FacebookUser`, `EmailAccountUser` and `BasicNoAuthUser`
- These objects are now passed through the AuthManagers layer and into the JPA layer to save these details to the DB
- Additional fields: first name, last name and username are now stored to the auth provider DB table
- The database scripts are updated to include the additional fields