Creates a new Heap.

If __Mode__ is gb.Ascent, it's a MinHeap, i.e. the smallest element is at
the beginning. If __Mode__ is gb.Descent, it's a MaxHeap.

If the __Array__ argument is given, a copy of that array is transformed
into a Heap, by using a bottom-up algorithm which is O(n).