Improvements to AbstractProvider

I'm a little concerned about these. These being in the `AbstractProvider` is a little too generic, as some systems have `id`, some have `user_id`, some have `uid`, some are foreign. 

That is why I stuck to a random array of things coming back for a while.

Furthermore, having some methods for some properties, and an undocumented array of stuff for others is a bit half and half. I would prefer to see a UserProperties object being made with setters being used to define values passed to those setters.