I am a bit concerned about the Exceptions here - for example `ScriptCompilationException` javadoc says 

    "Exception to be thrown on script compilation failure."

Where here it could be parsing, compilation or execution.

The method below `throws Exception` it is not generally recommended to throw `Exception` because it does not convey any info about the type of possible exceptions. Further, if we do allow Exception, then the catch for `InterruptedException` is not necessary.

Similarly, `execute` should probably be modeled after `GroovyScriptFactory.executeScript()` and only throw `ScriptCompilationException`.