Rewriting purge task so that we're not activating the next async purge cycle until the previous task has completed. Now the task calls itself again when the process completes, instead of assuming the process is done with a repeating timer task

Updating command-based purge to new purge tasks

Changing array list to a copy-on-write so that it works better with concurrency.

Cleaning up purge code, adding callbacks to direct the result info, changing prism logger to static