Finally got binary tree remove() working *and* not leaking memory.  It's almost embaressing how simple the final code is considering how long it took to get right.