AbstractModuleInfo: add missing final keyword
AbstractModuleInfo: parse parameters lazily

This change does two interrelated things:

1) It tightens the modifier of the primary parameter data structures
   (inputMap, inputList, outputMap and outputList) to private from
   protected. It adds new accessors: inputMap(), inputList(),
   outputMap() and outputList(), respectively.

   Rationale: protected fields are directly accessible in subclasses
   with no way to modify runtime behavior. In contrast, using protected
   methods to access internal data structures allows subclasses to
   override behavior by overriding those methods.

2) It initializes those data structures lazily (i.e., only when they
   are first accessed via their accessor methods) -- something which
   was impossible when the fields themselves were exposed due to the
   protected keyword.
ScriptInfo: remove checked exceptions

This change is in preparation for unifying ScriptInfo's parameter
parsing with AbstractModuleInfo's lazy initialization mechanism.
ScriptInfo: tweak style
ScriptInfo: tweak how reader field is managed
fixup! ScriptInfo: tweak style
ScriptInfo: parse script parameters lazily

This change adds a simple callback method in the abstract layer which
concrete subclasses can override to define how parameters are parsed
upon first access.

This lazy parsing reduces the startup time of ImageJ by allowing scripts
to appear in the menu structure without needing to be parsed first.

For now, we keep ScriptInfo's parseParameters() method at public
visibility, since it is nice to be able to reparse parameters in case
the script changed.
Merge branch 'lazy-script-params'

This branch makes scripts initialize their parameters lazily, similar to
how commands do. Such lazy parsing reduces the startup time of ImageJ by
allowing scripts to appear in the menu structure without needing to be
parsed first.