A lot of the `node.spill()` code is moved over from `Bucket.spill()`. The main difference is that it's depth-first recursive and it splits first before spilling instead of combining the two into one phase.