Warren Abstract Machine - A embedded Prolog compiler and virtual machine for PHP