Fix bug in heapify_down() to swap a node down multiple levels.

Reference:
https://en.wikipedia.org/wiki/Heap_(data_structure)
Rename heapify_down() to sift_down() to match reference article.

Reference:
https://en.wikipedia.org/wiki/Heap_(data_structure)
Add heapify().