Treap deletion was pretty messed up. It forgot to reset parent and ref
for the swapped node before using them to finally delete. And it didn't
get all the weird cases right where the child node to swap is the direct
child of the node. In that case we can't just swap the parent pointers
and node pointers, they need to be special cased.
So nuts to all that. We'll just rotate the node down until it doesn't
have both children. They result in pretty similar patterns and the
rotation mechanism is much simpler to understand.
Signed-off-by: Zach Brown <zab@versity.com>