Change google:queue error code from service-unavailable to not-implemented

Note that I never actually get around to implementing google:queue
in this branch, so this is a pretty appropriate first commit ;-)
Pretend that we implement facebook's suspend extension

Currently using https://bugs.freedesktop.org/show_bug.cgi?id=38943
as a reference for the protocol.

Actual implemention to come later.
Implement ejabberd_suspend sockmod type and use it

This is a wrapper around any other module that implements the
sockmod interface. Currently it doesn't do any of the clever
queueing stuff yet, so it is just another layer of indirection.

It cribs heavily off ejabberd_socket.erl

Note that in ejabberd_c2s, the reply stanza to <sleep/> is routed
using the normal mechanism. This is a temporary measure to make
my tests pass. Once I get queueing working, it will have to be sent
in as the last argument to ejabberd_suspend:sleep/3, or it won't
get routed until <wake/> happens (which seems pointless)
trivial makefile in the root of the git repo

I never cd anywhere other than the root of a git repository,
and I like to be able to type make and have things happen.
Re-structure to become an FSM

* Cribbing heavily from ejabberd_c2s.erl and web/ejabberd_http_bind.erl

* The opaque SockData (#sockdata) struct is what's passed across the boundary
  between ejabberd_c2s and ejabberd_suspend. Do not confuse this with
  StateData (#suspend_state), which is the FSM state.

* Make handle_sync_event handle {send, Packet} and {send_xml, Packet}.
 * Note that send_xml is probably a lie.

The process I used went a bit like this:
until make | forbid Warning:
do
    seek to first error in ejabberd_suspend.erl
    fix any obvious errors
    copy-paste from ejabberd_c2s.erl or ejabberd_http_bind.erl
done

git commit -am "IT BUILDS: SHIP IT!"

until make && deploy && make -C ~/src/ejabberd_tests check
do
    read ejabberd.log and seek to the first error
    scratch head
    fix any obvious errors
    re-structure as required
done

git rebase --interactive # squash everything into an easily reviewable blob
send binary data into sleep/3
Handle wake and flush stanzas in the same way as sleep

Note that <flush/> is probably not implemented by facebook,
but it is implemented by google:queue, and it seems like a
good idea so I'm going to add it here anyway.
implement {flush_socket}

Also, wake/3 reduces to flush_socket, GTFO
(note that this probably leaks FSM processes like a sieve.
I will write a test for this and fix it later)
update copyright
import packaging efforts from git://git.deb.at/pkg/ejabberd.git

Note that dpkg-buildpackage fills the repo with cruft, so
I recommend the following build command:

git commit -am "WIP" && dpkg-buildpackage -us -uc && git reset --hard HEAD