Add and use AS chain index.

Index points into the list of ASs in the chain, and is used and
incremented appropriately.

Pretty-print AsChain objects nicely.

Remove a hacky way of determining the session case - we now carry
it in the AsChain and use that.

Nuance the no-fork handling a little. Still not perfect.

Support for deleting a header.
Improve commenting.
Add AS UT, and fix some bugs.

UT now has support for injecting a pjsip_msg.

Bugfixes:
- Don't keep P-Served-User across the orig/term turnaround, or
  we serve the wrong user!
- Don't free AsChain too early Unfortunately for now we don't free
  at all - need to resolve this.
Don't store chain in UASTransaction.

It doesn't belong to it, so it's confusing to do this.
Document and manage AsChain lifetime correctly.
Split out AsChainStep from AsChain.

The AsChain is long-lived and immutable.

The AsChainStep is a short-lived immutable data class that points into it.

A key advantage of this model is that we have no index being incremented
internally - we simply tell each AS (by ODI token) the next index it
should ask Sprout to proceed to, and when we receive that request we
do it. That means we can cope with forking ASs, which is a win wrt
MSF-IA-SIP.017 which recommends we set Request-Disposition: no-fork
on all steps except the last.
Remove unnecessary no-fork support.