Using PerformanceTestResult helpers

A performance helper suite of classes was introduced, allowing shootouts to be simpler:


          Callable<Void> exprCallable = new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                expression.value(context);
                return null;
            }
        };
        Callable<Void> javaCallable = new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                function(x);
                return null;
            }
        };
        PerformanceTestCallable exprPerfCallable = new PerformanceTestCallable("Expression "
                + expression.getExpressionString(), exprCallable);
        PerformanceTestCallable javaPerfCallable = new PerformanceTestCallable("Java", javaCallable);

        PerformanceTestResult compareResult = PerformanceTestHelper.compare(20, 200000, exprPerfCallable,
                javaPerfCallable);
        compareResult.printResults();

The API is com.splwg.base.api.testers.performance.PerformanceTestHelper:


    public static PerformanceTestResult compare(int warmups, int reps, PerformanceTestCallable... callables)
            throws Exception {

Each of the performance callables is treated the same. It gets a series of warmup executions to populate caches, and to allow hotspot JVM optimizations of any methods. Then the accurate system nano timing (for example, System.nanoTime()) is called around the loop of the given number of reps.