Adding hibernation timeouts on drains

An inactive drain or buffer (Receives no request from the outside world)
should be sent to hibernation in order to trigger a full-sweep GC,
compact the memory of the process, and reduce the overall load of the
system, and possibly reducing memory fragmentation of the VM at the cost
of slightly more CPU when it triggers.

The timeout is implemented using the gen_fsm timeout option, which
automatically resets timeout timers when a message is processed by the
process. This should allow to generally catch any kind of inactivity and
force hibernation of the processes.

Note: it is not yet known if the timeout value of 5 seconds or the
amount of timers setup/cancellations will have an impact of any
significance on an active system or not. The values may need to be
tweaked or the effort redirected towards manual GC if refc binaries keep
on hogging the memory after this.
Moving logging to lager

The current logplex version shows a point of contention for logs through
using io:format/2. Although it is unlikely lager will help a lot with
it given we don't log directly to disk (and this is where it shines in
comparison to other logging engines), it's worth trying to see if things
are improving with it.

Custom log formats are used to make sure the production log format
remains 100% identical to the former one. They will, however, be
different during test runs because no specific care has been taken to
make the lager config be compatible in test cases.
Moving to a sys.config configuration

Rather than configuring specific apps in many places (bin/logplex,
bin/devel_logplex, logplex_app.erl), configurations are moved to a
sys.config file that can be loaded by adding `-config sys` to the `erl`
exectuable, or loaded automatically when generating an OTP release.
Live upgrade for OOM branch if merged in for v69.2
configuring lager watermarks