CommandInfo: implement the Versioned interface
FileUtils: add method to obtain last modified time
FileUtils: add method to read contents of a file
FileUtils: add method to write data to a file
Add utility class for cryptographic hashes
Add unit tests for DigestUtils
AbstractModuleInfo: implement Versioned interface

The default implementation just uses the delegate class, analogous to
how the default implementation of Locatable works. This behavior will
need to be overridden in ScriptInfo, since it uses the same delegate
class (ScriptModule) for all scripts.
ScriptInfo: override behavior of getVersion()

Scripts are now versioned according to a datestamp matching the
script's last modified time, together with a hash of the script's
contents (when available).
ScriptInfoTest: add a test for getVersion()
DefaultWelcomeService: lean on DigestUtils

This addresses issue #82.
Merge pull request #104 from scijava/versioned-modules

Make modules know their version
mailmap: add another alias for dscho
ServicesLoadedEvent: add missing javadoc
DefaultScriptService: fix service aliases

Previously, if a service depending on the ScriptService called addAlias
during its initialization (which is the case for ImageJ's
LegacyService), it would trigger the ScriptService to initialize its
alias map, including addition of all available services to the map. But
at that point, not all services are available yet. Better is to wait to
add services to the alias map until it is _certain_ that the service
initialization is complete. The ServicesLoadedEvent is perfect for this.
DefaultScriptService: fix NPE

Thanks, Jenkins.
UsageStats: track more information

Specifically, let's track name, label, description and version.

From a performance perspective, for each identifiable object (e.g., a
ModuleInfo) we only need to interrogate and set this information once
(until statistics are flushed), so hopefully it does not add too much
overhead.

The alternative -- reconstructing the information after the fact --
is tough because the framework lacks a unified way of looking up objects
based on their identifiers. It is not required for Identifiable objects
to register themselves in any way, so it may not be possible to learn
anything else once the usage event is reported to the service.
Refactor Prefs to PrefService

Using a static utility method for Prefs is limiting - it provides no way
to override preference saving/loading behavior. This creates problems
when there are errors or negative interactions with the Preferences
implementation - for example, in MATLAB there are known bugs regarding
the Java Preferences implementation.

By converting to a PrefService we can now control this behavior more
precisely, as needed. The Prefs utility class will remain for now, but
will delegate to the PrefService when it has been created - allowing the
utility method behavior to be overridden similarly.
Update Prefs usage to PrefService

All Contextual classes that used the Prefs static utility class should
now be using PrefService.
ModuleService: add save/load item methods

Added API to save/load ModuleItems. This will allow Contextual classes
to move away from ModuleItem#loadValue and ModuleItem#saveValue, which
are not Contextual and go directly through the Prefs utility class.

Adds a default implementation in DefaultModuleService, using the
PrefService if able (which requires an AbstractModuleItem). If
necessary, still falls back to ModuleItem's saveValue and loadValue
methods.
Mark saveValue and loadValue deprecated

ModuleItem#saveValue and ModuleItem#loadValue are now deprecated in
favor of ModuleService methods, which can be called from a Contextual
environment and thus use the new PrefService API.