Implement SIP session tracking for SIP validation

- Adds the ability to track individual SIP  dialogs started via INVITE in
the SipDialog class.

- Adds the SipSessionTracker, which tracks one or more SipDialogs
and uses that information to validate/filter incoming/outgoing SIP messages.

- Implements a timer for closing a SIP Delegate, where we will move
feature tags to the state DEREGISTERING_REASON_DESTROY_PENDING and wait until
all SIP dialogs on that delgate are closed before closing the delegate
itself. If the timer times out (1 second), cleanupSession will be called on
all delegates and then the delegate will be forcefully closed.

- Implements a timer for registration changes. The modem may delay operations
that cause existing SIP dialogs to end prematurely or registration state
to change. In this case, the modem will move to a DEREGISTERING_REASON_* and
wait for any existing dialogs to close before completing the state change.
In this state, we will not allow new SIP Sessions to be created for that
feature tag. If the timer times out (1 second), we will call cleanupSession
on behalf of the application and allow the state transition to proceed.

- Improves outgoing message validation by ensuring the Accept-Contact
header of the outgoing INVITE includes a feature tag registered by this
delegate.

Test: 173828358
Bug: atest TeleServiceTest
Change-Id: If39441d0c2367e53c930ab65616d14d87460a31a
19 files changed