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

### What this PR changes
* This updates the JSQLTask class in order to implement its own run method, and have sub classes override runQuery instead of 'run'.
* The sub class will use the 'set' method on a given JResultStore instead of executing the JCaller directly
* 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.
* The class JCallerExecuteRunnable implements runnable and will execute a JCaller with a given JResultStore, for easy execution with the resultExecutorService.
* All instances of System.out / System.err are replaced by uses of Logger, so that projects using JSQLAPI can give their own Logger output for errors.
* All SQL queries are run in one thread, to avoid having queries executed after other ones which were scheduled first. For instance, of a given project created a table and then set a value in that table, you would want these to be executed in order, otherwise errors would occur.

#### Reasoning for overhaul
This allows each query/update to be tried twice, in case the connection has gone bad (not much of a reason, but pretty important I think).