Sync sys/queue.h with FreeBSD:
* Introduce REMOVE_NEXT() macro's for SLIST and STAILQ.
* Add sanity checking for QUEUE(3) TAILQs and LISTs under
INVARIANTS. Races may lead to list corruption, which can be
difficult to unravel in a post-mortem analysis. These checks verify
that the prev and next pointers are consistent when inserting or
removing elements, thus catching any corruption earlier.
* Use TRASHIT to break LIST and SLIST link pointers on element removal.
* Add more _FOREACH_MUTABLEs. Note: FreeBSD and NetBSD call these _SAFE,
but _MUTABLE is a better name, so that's what we're using.
* Add a macro for SLIST traversal 'SLIST_FOREACH_PREVPTR',
this macro keeps a pointer to the previous element's next
pointer to allow for search and O(1) removal.
* Remove CIRCLEQs and replace them with TAILQs.