[dict_heap] Fix returning None if remaining items have inf heap key
[binary_heap] Add simple binary heap implementation
[test_binary_heap] Add binary heap unit test
[binary_heap] Fix pop/shift_down bug (when some child didn't exist)

The bug was that when we got to the leaf level (or even when a node had only
one child) the children indices were pointing past the end of the _items list
so we run into KeyErrors. Added checks to fix it.
[binary_heap] Add a few comments