Add `first` and `last` session refs to `Call`s
Add `first` and `last` session refs to `Call`s

This allows for explicit reference to the first and last sessions
within a given call. The new `append` method can be used to add
new sessions and update the `last` property.
Weak refs are used to avoid session ref cycles.

The motivation for this change is that the previous property
names `caller` and `callee` don't have meaning in contexts where the
FS slave is not originating calls (eg. monitoring). A more technical
reason is that the `Metrics` app can suffer from aliasing where the
`caller` session ref could in some cases point to the `callee` and
vice-versa due to the use of `Call.get_peer` (which internally uses
`Call.sessions[0]`) inside a "CHANNEL_HANGUP" callback (who's handler
pops the session model from `Call.sessions` prior to invoking the
callback chain). With this change such mis-referencing can no longer
occur.

sangoma/switchy