Partly overhaul the system for executing sql statements, mainly in order to allow for re-running the queries/updates if the connection gets old.

This updates the JSQLTask class in order to implement its own run method, and have sub classes override runQuery.

The sub class will then, instead of executing the JCaller directly, use the 'set' method on a given JResultStore.

The JResultStore will store a result from the query, so that the JSQLTask can use it afterwards, but also can be set multiple times in case the
query has to be re-run.

The JSQLTask will attempt to re-run the query once if any JSQLExceptions occur using a new Connection. If it fails with the new Connection, the error
will then be logged to console.

After the query successfully (or unsuccessfully) runs, the JCaller will be called in a new thread from the resultExecutorService. Because the 'run'
method isn't called directly, there is a new class introduced, JCallerExecuteRunnable, which implements Runnable and will run the JCaller in the
separate thread, with the result in the JResultStore.