Add new baseQueue and underlying priority queue code and tests.

baseQueue will be embedded in all range queue implementations.
Btw, this is why I sometimes struggle with whether unexported structs should have exported methods. The argument for doing so is that it provides a distinction between the "public" API and private to the struct. Other code in the package still needs to use the unexported struct and when you're looking at the code, it's nice to know which methods should be called and which are internal.