Updating token refresh logic (and some minor API changes)

Updating token refresh logic to pass client credential or assertion when needed
Adding AcquireTokenSilent API with client credential, certificate or assertion
Removing redundant parameter clientId from the API when ClientCredential, ClientAssertion or ClientAssertionCertificate is passed.
Switching order of parameters in a couple of overloads such that client parameter is passed before user parameter (for consistency with the rest of the API)
Adding paramter clientId to constructor of ClientAssertion (needed for caching)
The reason is that developer never asked for token to be refreshed. They asked for a token and we should give it to them in any way possible.