oom diagnostic logging

Disable the oom killer for a container's memory cgroup when the memory
limit is set. If oom occurs later, the problem task (that is, the one
which attempting to acquire memory) will be suspended and the oom
notifier will be driven. This gives us the opportunity to gather
diagnostics while the problem task is still alive and the cgroup is
still out of memory.

In the oom notifier, log memory statistics and re-enable the oom
killer.

Re-enabling the oom killer in the oom notifier is necessary in spite
of the fact that the oom notifier proceeds to terminate the container
since the current method of terminating the container can, at least in
theory, deadlock when invoked in an "out of memory" state (wshd can
require more memory, e.g. for a stack frame, and be suspended).

The oom killer will kill a task, usually the application, in the
container and enable container termination to successfully kill the
remaining tasks via wshd. If wshd hits the container's memory limit
with the oom killer enabled, the oom killer should kill it and this
will kill all the other processes in the container (since wshd is the
PID namespace parent).

IntelliJ IDEA .iml files are ignored.