Begun the work of memoizing all computationally expensive getter methods
within the model and the core plug-ins. Also improved the dashboard
loading test so it shows the time taken when only some of the files have
been modified.
Make patch handling a pure plug-in concern so that source modules can
better limit when recalculation needs to occur. The down side to this
decision  is that plug-in developers are more likely to forget to add
support for patches if there is no API reminder of the need to do this.
Start forcing static intializer blocks that read files to be executed
when the file access checker is installed, so this file access doesn't
need to be made part of the memoization scope.
Ignore file access checks on directories (these are probably caused by
the File.exists() method) as this is likely just the model doing a
directory check for a parent directory of a file we are interested in --
this change will make memoization bugs possible again, but is unlikely
to cause bugs in reality.
Converted the NamespacedJsSourceModule plug-in to use memoization.
Added logging support to MemoizedValue so we can see when memoized
values are re-computed.
Return an FMI for the parent directory of existent files, rather than
returning a pessimistic FMI. Return an optimistic FMI instead of a
pessimistic FMI for non-existent files/directories, since these can
never change. This change is an interim solution for #403.
Merge pull request #510 from BladeRunnerJS/memoize-all-expensive-getters

Memoize all expensive getters