DRY up sentry and logging

Wrap every blather handler in sentry setup and exception capturing so each route
doesn't have to handle it seperately.

panic is a last resort, usually better to return an XMPP error and report/log,
so default to that.

Also wraps each handler in a span. Note that for multistage command handlers
this span is too long and they will want to call finish/set_span internally.
Merge branch 'background-log'

* background-log:
  Log in background thread
  Don't run our whole app in an at_exit
Log in background thread

File IO is fast, but can still block reactor.
Don't run our whole app in an at_exit

We don't use much of it, and this makes using other at_exit hooks more realistic.
Merge branch 'new-blather'

* new-blather:
  Update to latest blather upstream
  notify_customer helper
Fix for em-pg-client and latest pg gem
Update to latest blather upstream

Which has merged our changes
notify_customer helper
Throttle notification processing to prevent starvation
Do not catchup low-balance notifications for expired customers

Makes the number of users to do on startup much smaller and slower-growing.
Expired users have been told about their low balance quite a bit already, and
will be notified by billing cronjob etc from here out.
Optional alternate transcription with rev.ai

The bitfield bit 1 was used by a different project (sgx-catapult, see:
This other project no longer uses the bit, and in fact that whole project is
dead and gone, but if you previously ran that project against the same redis
that you now run this project against then please make sure you have zeroed-out
that bit first.

You can verify using this script:

    redis = Redis.new
    redis.keys("catapult_settings_flags-*").each do |k|
      p redis.getbit(k, 1)
Bad XML parser produces hash for one element, array for >1
Fix tests for sip account using APIError
Amount needs to be a number to check it
Extract response_status type errors
Don't bother looking for nothing