Rename DefaultModule* to DefaultMutableModule*

The reason is that these default implementations implement not only the
Module* interfaces, but the MutableModule* ones. It is misleading to
call them DefaultModule* when in fact they are more than that.

This change also splits the old DefaultModuleInfo into two parts: an
AbstractModuleInfo base class, and a DefaultMutableModuleInfo default
implementation. This brings it in line with the Module and ModuleItem
interfaces, which also have both an abstract base class and a default
mutable implementation.
ModuleInfo: add type-safe item accessors

It is now possible to ask for an input or output item by both name and
type. The behavior is the same as asking only by name, except that if
the item of that name exists but is the wrong type, the method throws an
IllegalArgumentException. In this way, there is now a compiler-friendly
way to ask for inputs and outputs without explicit casting.
MutableModuleInfo: items are not always mutable

It is helpful to make an explicit note in the javadoc that a
MutableModuleInfo does not always have mutable module items (i.e.,
MutableModuleItems). In particular, it is very possible for downstream
code to add items via addInput(ModuleItem<?>) which are not mutable.
MutableModule: explicitly promise a mutable info

It was always the case that our existing MutableModule implementation
(DefaultMutableModule) has a MutableModuleInfo. But it was not
previously guaranteed at the interface level, only in the
DefaultMutableModule implementation itself. It is nicer to guarantee it
at the interface level to avoid downstream code needing to cast and/or
rely on something being an instance of the default implementation.
DynamicCommandInfo: add type-safe item accessors

These accessors allow you to explicitly obtain a MutableModuleItem<T>
for a named input or output (together with its Class<T> type). Of
course, if the item is not a MutableModuleItem, a ClassCastException
will be thrown, but these new methods allow downstream code to access
known-mutable items (particularly those explicitly declared as
@Parameters) in a friendlier way, without ugly casts or
@SuppressWarnings("unchecked") annotations.
Merge branch 'mutable-modules'

This branch cleans up the MutableModule* type hierarchy, and adds some
convenience methods for use by commands which extend DynamicCommand.