intrusive: add intrusive_tree

This template implements an intrusive binary tree ordered on a predicate,
specifically a red-black tree with insert and delete operations provided.
No find operation is provided; however, in-order traversal (via min + next &
max + prev) and top-down search (via root, left, and right) are provided.
Given these, it is trivial to find any node in the tree and delete it.

All operations are implemented with loops instead of recursion based on the
cases in Bayer's original paper.  Additionally, the in-order iteration
functions are not recursive and do not use any external data structure to
traverse the tree.

Be aware that in tree remove, the original node is used as a dummy node in
the case that it has no children.  The delayed unlink greatly simplifies the
rest of that already complex code.

Most of secondary public methods are backed by private methods.  This allows
extra asserts in the public versions that are either temporarily violated or
infinitely recursive when invoked by private callers.
makefile: optimize for non-DEBUG

When !DEBUG, it seems like it is worth it to enable compiler optimizations.