Only show buy credit option if customer has a plan and a credit card
Show commands conditionally (plus add voicemail record command)

Refactor to a factory that allows commands to be shown conditionally, so that
the voicemail record command can only be shown if the customer has a forwarding
target set up.
Pass through commands we know the SGX can handle
Pass everything from SGX to user, not just <message/>
Remove some of the noise from the command list
Fix sentry issue SGX-JMP-4

Typo not caught by tests because this method had none.  Add a test, fix the typo.
Fix copy-paste error

These lines won't work because not processing an iq or anything with a node
here.  Set up sentry in a sensible way for messages.
This is not really an error, it just means you're all done
Merge branch 'create-reset-sip-account'

* create-reset-sip-account:
  Create or reset SIP account
  Factor out Catapult connection
Create or reset SIP account

New command to create or reset SIP account.  Always try create first because
it's faster and more common, fall back to search the list for our account if
that fails due to conflict.  Password is always randomly generated from the
mnemonicode word list.
Factor out Catapult connection

So that every object which needs to talk to Catapult does not need to know
everthing about it.
Usage command

Customer has a CustomerUsage which can fetch data to build a UsageReport
which returns a jabber:x:data form "table" as per spec for per-day in
the last month.

Minutes come from cdr table in postgresql.
Messages come from redis.
Catch more exception in web-register command and send user to sentry
Add Sentry

Capture in #panic and a few other places, add customer and route context
as well as some initial breadcrumbs in the register command.
Add missing require

To allow these modules to be used in isolation (especially when
Refactor BuyAccountCreditForm

add_to_form no longer needs a promise or a network call, instead we use
a factory to get that data up front and inject the dependency.

New BuyAccountCreditForm#parse to get the relevant data back out of an
XMPP form.

Some changes to Transaction and sgx_jmp.rb to use the new method
Merge branch 'count-outbound-messages'

* count-outbound-messages:
  Store customer outbound messages/day for 1 year in redis
Store customer outbound messages/day for 1 year in redis

Storage is a sorted set, with dates as the values and message counts as the
scores.  Use zincrby to increment the message count by 1 on each new message.
Use zremrangebylex to remove all items older than 1 year so the set does not
grow unboundedly.

Dates with known message counts can be found using zrangebylex. Scores can be
had one at a time with zscore.  In redis 6.2+ zrange bylex withscores or zmscore
may also be used, but that is only in Debian experimental at time of writing.
Merge branch 'wording'

* wording:
  Update instructions to be closer to what is in current web signup
Disco info with XEP-0157

Allows us to advertise support address, for eventual inclusion in Cheogram adhoc
bot help output.