Work towards general session renegotiation

Lots more work towards re-invite/renegotiation implementation, including
some fixes/improvements to the special case of hold/resume.

Still todo:
- Add renegotiate() API method
- Stream renegotiation unit testing
- Client testing, including non-SDK SIP endpoints