Make PrologControl abstract for better embedding

Embedders can now subclass PrologControl and use a callback model
to receive results from the evaluation, rather than polling a
queue supplied by a background thread.  This allows an embedder to
buffer results into their own data structure during the success()
method, avoiding the need to allocate, start, and synchronize with
a background thread that manages the interpreter state.
6 files changed