I am the world's biggest moron.

of course there's a race condition, if you close the bloody socket before
setting the state to conn_closed. The amount of time I looked straight at it
and didn't see it is causing me physical pain.
single core cpus hate this?
Avoid OOM errors when locked items stuck in tail

If a client fetches a few thousand keys, then does not ever read the socket,
those keys will stay reflocked until the client disconnects or resumes. If
some of those items are unpopular they can drop to the tail, causing all
writes in the slab class to OOM.

This creates some relief by chucking the items back to the head.

Big thanks to Jay Grizzard and other folks at Box for helping narrow this
down.
Stats and tests for 'refhang' problem

Add "reflocked" counter to "stats" and "stats items". Not sure if this is a
good name for that or not.

Add tests to verify a fully 'locked' LRU correctly reports oom
rename reflocked + add protocol.txt line

now lrutail_reflocked.. gross but more descriptive. will still make people
thing something went wrong, oh well.
doc/Makefile: avoid GNU extentions, be tidy

This commit does three things. One is avoiding GNU extentions since they aren't
used elsewhere. It also tells xml2rfc to cache in side the build directory to
avoid writing outside our own space when building. Finally, it removes the .chk
build since that doesn't appear needed.
keep local copies of dtd and use it

This commit ensures we don't rely on and external site for the docs to build.
If that site were to go away, we wouldn't be able to build docs.
second part of change to use local copies of dtd
changes to fix build of docs with newer xml2rfc