Major: make RunAsync actually aSync and queue block changes to RunSync (via MatchResult class)
Add: settings to control async vs sync, scan all loaded chunks, material needed & run on startup

* settings:
** scan_asynchronously (if false, scan synchronously)
** scan_all_loaded_chunks (if false, uses radius instead)
** material_needed (if set, required to be touching at least one face of target)
** run_on_startup (if false, wont start until manually started with /og on)
Add: recipies (autocreate recipes.yml file) & change gatheredChunks to a queue for better processing

* recipies only have basic parameters so far
* making gatheredChunks a queue means the gatherchunks function can push to the queue even if the scanning hasn't finished.