Warren-Hollerbach Abstract Machine: A Prolog interpreter in JavaScript, implementing the model given by the Warren Abstract Machine