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 to kill the problem task (or at least some task in the cgroup -
the oom killer is not entirely predictable).

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 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 typically kill the application and enable
container termination to successfully kill the remaining tasks via
wshd. If wshd hits an oom condition 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).
Ignore IDEA .iml files