ID Site implementation

Synopsis:

* New method `Application.createIdSiteUrl()` for creating the redirect URL that takes the user to the ID site

* New method `Application.handleIdSiteCallback()` for reading the JWT response from the ID site callback and building an `AuthenticationResult`

* New property `idSiteResponse` on `AuthenticationResult` for storing the decoded JWT response value - this is where you can get your `state` property from if you specified it.

* Implement a default Nonce Store by using a region in the data store cache

* New option `nonceStore` on the Client constructor, accepts an interface object for interacting with a custom Nonce Store
Code details aside, the ID Site flow is an authentication attempt - I'm not sure how you could argue otherwise.  The fact that is uses the ID site is just details.  So I think we should discuss this conceptual issue.

Regarding `isNewSub`, I agree that we should decouple that.  It seems that we should just attach `isNew` and the `state` property directly to the object that is returned by `handleIdSiteCallback`

FWIW, I like that we typically deliver `getAccount()` instead of `.account` because it leaves the choice up to the SDK user: do I incur that API request for the account?  This is just a personal preference because I like to optimize network traffic, but it may make sense to just make this choice for our SDK users and always resolve the account for them.