Clean up `collections::binary_heap`

Just a few simplifications and a missing `assert!`.
As written this now looks like a logic error (the old way did too). I'd appreciate a comment to the effect of "cache old len for siftup", or rename it to old_len.