POM: add missing UDUNITS dependency

Everything still built because the dependency was inherited
transitively from io.scif:scifio. But we will be removing the
SCIFIO dependency soon, and we do directly need edu.ucar:udunits.
Avoid using SCIFIO in imagej-common's tests

Curtis says this is bad, bad, bad.

Actually, he said that the hierarchy is being restructured and that
imagej-common should be upstream of both SCIFIO and ImageJ-OPS, and it
all makes sense, but that is not half as funny a commit message.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
DatasetService: deprecate almost-obsolete methods

This deprecation is in preparation for the removal of the SCIFIO
dependency from imagej-common (the dependency is being inverted).

Ultimately, logic for opening up Datasets needs to live in SCIFIO, not
imagej-common. (And alternately, a more agnostic way of opening and
saving Datasets can be had using the org.scijava.io.IOService.)
WIP: POM: pin to scijava-common 2.35.0 release

This adds the ReflectedUniverse utility class, which we will soon use.
Remove compile-time usages of SCIFIO

Some I/O-related DatasetService methods exposed SCIFIO types
(specifically: io.scif.Metadata and io.scif.config.SCIFIOConfig) in
their API. Those references have been generalized to Object. This will
break backwards compatibility mostly for those calling "save" and
expecting the return value to be typed as Metadata rather than Object.

The DefaultDatasetService employed SCIFIO in its canOpen, canSave, open
and save methods. That usage has been wrapped via reflection, so that if
SCIFIO is present on the classpath, the methods will continue to work as
before, while avoiding a compile-time dependency on SCIFIO. This
approach is temporary, until those deprecated methods are removed in
favor of a better solution.

See also:
https://github.com/scijava/scijava-common/compare/robust-io
POM: remove no-longer-needed SCIFIO dependency

The io.scif:scifio project will now depend on imagej-common, instead
of the other way around. The rationale is that the ImageJ library
(net.imagej:imagej-common) is the place the adds metadata richness on
top of the ImgLib2 library (net.imglib2:imglib2). And the SCIFIO
library (io.scif:scifio) is built on top of that metadata richness.

For details, see:
http://imagej.net/Architecture