Case-insensitive next

Otherwise typing Next can result in very unexpected things.
HACK: Session ID is technically optional

Some commands are busted because it turns out sessionid is recommended
but not required.

So for now I'm doing the bare minimum to make it work.
Pass through forwarded JIDs

Need to pass through here as well in case the command does more queries before
replying to fwdBy.
Allow backends to ask users to start registration

This can power, eg, a web flow that ends in asking Cheogram to finish up and
will power the new JMP flow.  The abuse potential is low because you don't get
free-form text, all that can happen is you can have Cheogram ask the user if
they want to register with your hostname.  If they user ignores it nothing
happens, the end.
Remove unused dependency
Shorthand for starting registration process

You can now say "register jmp.chat" to start the registration process.  This
allows us to have a stateless backend-initiated flow so the user can be promted
to run this command (vs being prompted to say "register" and then say "jmp.chat"
in answer to an unexpected qustion).
If we get a note response while executing, wait for user to give next action

Instead of assuming all responses containing notes are the end of the flow,
check the status.  If the status is executing, we are not done so wait for the
user to say what action to take.
Allow multiple notes in command response

Spec says multiple notes is allowed.  Show them all for now, better than an
error anyway.
ConfigureDirectMessageRoute should keep the from if already from the compoent

This is for Adhoc bot -- the from is already from us, so avoid double-escaping
and confusing everyone.
Hide command with node jabber:iq:register from list

Since that will be embedded into the configure-direct-message-gateway command.
Allow backend route to expose an ad-hoc command for registration

In case a backend requires a multi-stage registration, pass through their
command steps as part of our command flow and save if successful.  Continue to
use IBR with backends that do not list a command with node jabber:iq:gateway.
Don't look for tel when stripping proxy

For /msg command, if the to is a valid JID and the domain part is ==
cheogram.com then just do the proxiedJidToReal and don't try to be nice about
typo'd JIDs with fancy tel detection that can break if the JID has too many
digits but is otherwise not trying to be a tel.
fix constraints for CI based on new hackage releases
Adhoc bot commands are case-insensitive

Because mobile users can't help but start messages with a captial
Allow skipping non-required fields

If you say `next` and the field is either not marked as required, or already has
a value, then skip to the next field and leave this one as-is.
Only process fields

Instead of checking in every condition if something is a field, filter out other
stuff we don't handle first.
Merge branch 'component-avatar'

* component-avatar:
  Show avatar in vCard for component also
  Notify of the component's avatar along with presence
  Respond with avatar contents when asked
Show avatar in vCard for component also
Notify of the component's avatar along with presence

Whenever we tell a JID that we are online, also tell them "hey, this is my
avatar BTW".  If they care they can fetch it from us.
Respond with avatar contents when asked

If an avatar is specified in the config file, grab the needed metadata.  We
assume the avatar is image/png since the spec mostly requires at least that
codec to be present.  If we receive a pubsub request for exactly the node and
item that is this avatar, we return the base64 encoded content.