Extract `ClasspathJar`, that gets paths on the jar containing a class.
`DSL.reset_application` resets the `application` global back to `nil`.

This should allow creating multiple runner objects, for different
region observers, within the same `JRubyEnvironment`.
Break out `SharedJRubyEnvironment`, `SharedRunner`.

This lets us share `JRubyEnvironment`s and askari runner instances
across region observer instances.  Things are reference counted with a
gross lock to eagerly clean things up.

Reference counts for jruby environments are tallied by the containing
jar name. Runners are tallied by the jar name and the askari
application name (the `askari.name` parameter.)
More eagerly set and clear the thread context class loader.
Drop use of thread locals in `ExecutionContext`.

We get the effect for free by use of the jruby `CONCURRENT` local
context provider.
Compile.