Simplify reclaim

On Illumos, kswapd and arc_reclaim_thread share responsibility for
memory reclaimation. arc_reclaim_thread will attempt to keep ahead of
system memory needs and kswapd will signal it as needed. On Linux, a
thread that needs memory when there is none available will immediately
begin "direct reclaim", which means that it will try freeing memory
itself.

This poses a few problems. First, it is possible for hundreds of threads
to enter direct reclaim. Unfortunately, only one can reclaim from ARC at
a time. This means that one will reap while the others will be told to
do other things. If we enter a state where ARC is the only source of
memory available on the system, then we effectively have a fork bomb
where all of the other reclaim threads will starve reclaimation from ARC
of CPU time.

Additionally, it is possible for ARC and Linux to have different ideas
of when a system is low on memory. If Linux thinks it is out of memory
and ARC disagrees, we will have a situation where arc_reclaim_thread
spins.

This patch attempts to address the first issue by signalling
arc_reclaim_thread to enter reclaim and blocking until
eitheri signalled by arc_reclaim_thread 1 second passes. Resuming after
1 second is necessary to resolve a race between arc_reclaim_thread doing
its broadcast and sleeping. A previous patch had empirical success in
resolving the second by moving primary responsibility for ARC memory
reclaimation to the ARC shrinker callback. This patch moves all ARC
memory reclaimation duties to arc_reclaim_thread, which should have a
similar effect.

Signed-off-by: Richard Yao <ryao@gentoo.org>