Extend the Java bindings with a message passing interface.

This fills the missing gap to communicate between the Java host
application and the PhantomJS client script. The client-side API is
shown in the new example/phantomjava.js. The Java API was updated and
is now used like this e.g.:

~~~~~~~~~~~~~~~~~~~~~~~~~~~
package main;

import phantom.PhantomJava;
import phantom.JavaCallback;
import phantom.QApplication;

public class Main extends JavaCallback
{
    public static void main(String[] args)
    {
		new Main(args);
    }

    private PhantomJava phantom;

    public Main(String[] args)
    {
        QApplication qCoreApp = new QApplication(args);

        phantom = PhantomJava.instance();
        phantom.listen(this);

        // TODO: use the proper path here.
        phantom.config().setScriptFile("examples/phantomjava.js");
        String[] scriptArgs = {"foo", "bar", "baz"};
        phantom.config().setScriptArgs(scriptArgs);

        // execute top-level code synchronously
        if (phantom.execute()) {
        	// wait for async code to finish / phantom to exit
            QApplication.exec();
        }

        System.out.println("Done: " + phantom.returnValue());

        // cleanup
        phantom.delete();
        qCoreApp.delete();
    }

    @Override
    public void phantomJsCallback(String data)
    {
    	System.out.println("Got message from PhantomJS: " + data);
    	phantom.call("foo!!");
        phantom.exit();
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~