Cache the results of the reader and don't rescan plans on each load
Currently we reparse every plan and every log file on startup. This takes several seconds.
We could instead store the timestamp of each file as we scan it, and on subsequent runs check the mtime before scanning again.