Merge pull request #2 from jaynel/TS-864.request.buffering

[TS-864] Buffer requests when there aren't enough sessions
Merge pull request #3 from duomark/master

TS-864.request.buffering Add node to session queue
Changed lager level to info for non-erroneous log messages.
Merge pull request #4 from inaka/igaray.lager_levels

Changed lager level to info for non-erroneous log messages.
stop handling other messages
Merge pull request #6 from georgeye/master

stop handling other messages
update version
decay nicely via supervisor - code copied from Jay
add get connection sup
Merge pull request #7 from georgeye/master

decay nicely via supervisor - code copied from Jay
Add elysium_channel; upgrade dependencies

Elysium_channel is a replacement for seestar_session which avoids
using the multiplexing logic for Cassandra queries. This logic is
brittle in the face of failure, and the elysium approach avoids
reusing a Cassandra connection for multiple simultaneous requests.

The channel is essentially a copy of seestar_session with some
code removed, so the compilation environment needed to handle
R16 vs R17 datatypes, thus the new elysium_compile_utils module.

Epocxy was upgraded to 0.9.8 mostly to allow the introduction
of synchronization barriers for testing purposes. As of yet,
there is no real dependency on 0.9.8 but other projects which
use elysium needed the latest version.

Seestar was upgraded to tigertext 0.1.1 which is a fork of
iamaleksey/seestar master. The introduction of elysium_channel
is incompatible with seestar_session in that mixing the two
types of sessions is not a good idea. The changes tigertext
wanted for seestar_session (send timeouts and a reduced
receive timeout) can only be applied properly in a world of
single requests on a socket. The multiplexing approach must
wait forever because it cannot distinguish timeouts on all
the outstanding requests.

The brittleness in seestar is due to the fact that all the
pending requests are kept in a gen_server state, with overflow
going to an ets table. If the seestar_session gen_server
goes down it will take all the requests that are waiting
for replies with it. Worse, since the gen_server owns the
ets table, it will also take down all the pending requests
that haven't been sent to Cassandra. In process Cassandra
requests have to be lost in any case since the socket will
be closed, but the untransmitted requests should still be
able to be managed.

In the end, having monoplexed requests makes recoverability
and resilience easier, plus it allows us to rely on normal
gen_server and gen_tcp:send timeouts to identify when the
connection to Cassandra is not working normally.
TS-973 Do not match unexpected messages in wait_for_session
Don't report error when a elysium session decays
Use seestar_session still, no upgrade to elysium_channel
No decay on initial seestar channel/session connection
Only replace supervised connections which decay
Fix race condition in elysium_bs_serial on checkin with pending requests; demonitor and flush DOWN msgs
Use try/after to guarantee demonitor occurs