Adding test cases and refresh token features

We have been relying on oauth2-client extensively for a while now, and fix quite a few bugs along the way, so this is a pull request for reference on those fixes.

Unfortunately, to make testing and bugfix works, this branch involves a breaking change:

We have to refactor Guzzle from IdentityProvider, otherwise we can't really write unit test. This means the current usage is no longer valid, developers have to pass in a HTTP Client manually or using service provider to bind.

We also take the time to make individual provider a bit more resilient when dealing with incomplete profile, as well as  adding refresh token support for google and facebook.

You probably don't want to merge this pull request to master, but if you would like to work towards a branch with testing, we are all ears.

credits on refactoring and testing goes to my teammate @pfchen