Make BoundedPriorityQueue use internal heap instead of subclassing from list

Added missing methods ( __len__ & __getitem__ ) to changes proposed by @asbxrm

Asbjørn Bjørnstad said:

> The python version of heapq.heappush starts by calling heap.append(item), with BoundedPriorityQueue calling ?> > heappush in it's append function the end result is endless recursion.

> Cpython uses a c implementation of heapq, which doesn't have this issue (Apparently). But other impementations > may use the python version, pypy is the one I tried where this issue appears.