Refactored UserProfile into an interface with a base implementation as
BaseUserProfile. All OAuth providers now have a specific implementation
for UserProfile thus providing richness in the API
AuthenticatedUser.getUserProfile().

Other minor refactorings and documentation changes as well.