Add Session Renegotiation
Adds session renegotiation from scratch. The idea is that it will wipe out all data from the extant session and build a new one. This is done off a standard key request. It is known as new because the key request will not be present in a list of previous key requests.
We added a version number, the behavior should only change if newer version requests are detected. The version number should be backwards compatible with the old serialization.
On receipt of a request, if a channel already exists and the request version is 1 or greater and if the fingerprint is not in the fingerprint list (AddIfNew(fingerprint)bool==true), we delete the session and establish a new one with the request. We then auto confirm the request.
A new call, ResetSession(...)
was added to handle session renegotiations. It deletes existing requests then resends the negotiation.