Add support for certificate based confidential client auth.  acquireTokenWithClientCertificate

We abstract out client certificate using class ClientAssertionCertificate which has the Sign method (and maybe a hash method). This way, the object can be created differently on different platforms and the API still have the same OM.