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)
You have similar checks and assignment that can refactored into string extensions.