Count failed sessions more correctly
Count failed sessions more correctly

Failed sessions include any that have not been answered or which have
non-normal hangup causes. Store all failed sessions in a hangup cause keyed
dict for better organization and add `EventListener.count_failed()`
which counts all stored failed sessions from the lengths of the deques in
that dict. Consecutively, drop the `total_failed_sessions` counter attr.

Additionally, pop calls as soon as their `sessions` dict is empty
since sometimes the originating session can be popped by the
`BACKGROUND_JOB` handler which can lead to stale calls being left
about.

sangoma/switchy,wwezhuimeng/switch