Implement aggressive caching in PrologClassLoader

Rather than doing everything dynamically, implement the very
commonly used entry point logic by looking up predicates in
an internal hash map, reusing cached constructors when the
predicate has already been validated as being a proper type
the Prolog intepreter can access.
1 file changed