Extensional Higher-Order Logic Programming