Adding some properties to oauth
Oauth doesnt just return a token, it now maintains token state and keeps track of how long until the token expires
Various changes:
* Added ability to get user info
* Abstracted headers into their own module
* Added ability for oauth to exchange authorization codes
* Added more constants