-fixing ClientRegistration issue (client registration can end on transport
 switchover):
 Consider the case where we are registered over TCP due to DNS SRV record
 configuration.  Let's say an administrator reconfigures the DNS records to
 now make UDP the preferred transport.  When we re-register we will now
 send the re-registration message over UDP.  This will cause our contact
 address to be changed (ie: ;tranport=tcp will no longer exist).  So for a
 short period of time the registrar will return two contacts to us, both 
 belonging to us, one for TCP and one for UDP.  The TCP one will expire in
 a short amount of time, and if we return this expiry to the dispatch() 
 method then it will cause the ClientRegistration to end (see logic in 
 dispatch() that prints out the error "Server is using an unreasonably low 
 expiry: "...
 To fix this, I modified calculateExpiry to track two things:
 1. expiry - the lowest expiration value of all of our contacts
 2. reasonableExpiry - the lowest expiration value of all of our contacts
                       that is above the UnreasonablyLowExpirationThreshold 
                       (7 seconds)
 Before we return, if expiry is less than UnreasonablyLowExpirationThreshold
 but we had another contact that had a reasonable expiry value, then return
 that value instead.


git-svn-id: https://svn.resiprocate.org/rep/resiprocate/main@10090 ddefafc4-47db-0310-ae44-fa13212b10f2