[Feature request] Extract profile common fields 
In the current version, the profile returns the original data

Developers need to write a logic for each provider to extract general information such as username, avatar, id, email, etc.

```js
// Every developer has to write similar code:
let userInfo = {}
switch (grant.provider){
  case 'github':
    userInfo.id = profile.id
    userInfo.avater = profile.avatar_url
    userInfo.nickname = profile.name
    userInfo.email = profile.email
    break
  case 'weibo':
    userInfo.id = profile.id
    userInfo.avatar = profile.profile_image_url
    userInfo.nickname = profile.name
    userInfo.email = profile.email
    break
  case 'qq':
    userInfo.id = profile.openid
    userInfo.avatar = profile.figureurl_2,
    userInfo.nickname = profile.nickname
    break
}
```
So maybe it's better to let grant extract these common fields and keep the original data to `profile.raw`

```js
{
  access_token: '...',
  refresh_token: '...',
  profile: {
    id: '123',
    avatar: 'https://.....',
    nickname: 'tiaod',
    email: 'example@example.com',
    raw: {
      ... //the raw profile data
    }
  }
}
```