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)
That is by design. If we cannot refresh for other reason, we want to move to the next step to acquire new token. This is best effort.