func (h *FibHeap) Push(value interface{}) {
	n := &fibHeapNode{
		value: value,
	}
	h.count++
	h.insert(n)
}
Push adds value to the heap in O(1) time
package heap
type FibHeap struct {
	count int
	min   *fibHeapNode
	comp  func(a, b interface{}) bool
}
type fibHeapNode struct {
	value  interface{}
	marked bool
	degree int
	left   *fibHeapNode
	right  *fibHeapNode
	parent *fibHeapNode
	child  *fibHeapNode
}
func NewFibHeap(comp func(interface{}, interface{}) bool) *FibHeap {
	h := &FibHeap{
		comp: comp,
	}
	return h
}
func (h *FibHeap) Size() int {
	return h.count
}
func (h *FibHeap) IsEmpty() bool {
	return h.count == 0
}
func (h *FibHeap) Clear() {
	h.min = nil
	h.count = 0
}
func (h *FibHeap) Build(values []interface{}) {
	for _, v := range values {
		h.Push(v)
	}
}