a simple avl impl