Added LinkedIn Provider

I also changed some things in the AbstractProvider class to make it easier to configure new providers instead of completely overriding some methods.

For example, LinkedIn required scopes to be separated by a space and the request URL query parameters need to be encoded according to RFC3986 (spaces converted to `%20` instead of `+`). Other platforms will have different requirements (scopes separated by a comma or by a space but encoded as per RFC1738 etc.).

The `$scope_separator` and `$encoding_type` can now be configured on a per-provider basis.  This change makes it even more trivial to add new providers.