Grindr work rebase

Dear Reviewer/Merger

This clump of code represents work done on escalus for Grindr, LLC.

The main feature is automatic stream management handling for tcp clients. Any client with the config option
`{stream_management, true}` will automatically enable stream management at the negotiation phase, and will keep track of the `H` parameter, replying to server-side ack requests without user(programmer) intervention. 

Please see `tests/stream_automation_SUITE.erl` to see the benefits. (You need a running 'mongooseim@localhost' node with stream management enabled for the tests to work)

If you'd like to have manual access to ack requests and handle sending acks manually, make sure your escalus user spec contains: `{manual_ack, true}`.

Other goodies include query constructors for MAM (XEP-0313) and some refactoring.
DRY, I'd rewrite the more specific one in terms of the less specific one:
```erlang
is_resumed(SMID, #xmlel{name = <<"resumed">>} = Stanza) ->
    is_resumed(Stanza)
    andalso
    SMID == exml_query:attr(Stanza, <<"previd">>);
...
```