Add io.scif.refs package

Adds a RefManagerService for managing Reference implementations. When
there are references being maintained, a dedicated thread will poll a
ReferenceQueue in which these references were enqueued. When they are
dequeued, their cleanup method will be invoked.

This service is pared with the CleaningRef interface, which defines the
cleanup method. When implementing this interface, a type of Reference
should be extended, which will determine whne the CleaningRef will be
enqueued.

Also provided is a new plugin type - RefProvider. These are intended to
be singleton plugins bound to specific CleaningRef implementations,
responsible for checking compatibility and creating CleaningRef
instances.
Refactor cache functionality to remove finalize

The memory-based SCIFIOCellCache and disk-based MapDBCache have been
updated to use the new RefManagerService to manage stale SCIFIOCells,
instead of relying on overriden finalize mehthods.

Overriding finalize can cause objects to be resurrected, and is
generally highly discouraged. Instead, we can now register SCIFIOCells
and SCIFIOCellCaches via phantom references in the MemoryService and
maintain only weak references to these objects internally. When they
become eligible for garbage collection, the RefManagerService takes care of
performing clean up operations (which happen on a separate thread to limit
performance impact).

Also, all loops that would run until memory had freed up, catching OOM errors,
have been removed - as these were also quite dangerous and unnecessary without
the overridden finalize implementations (having lengthy operations in finalize
caused problems with the natural JVM memory management).

This patch also updates MapDB to 0.97,and updates the CacheServiceTests
to reflect the new reference-based functionality.

By moving the cleanup functionality to separate threads and delaying it until
actually necessary, we incur significantly less overhead. We also avoid disk
access whenever possible, further speeding up cache operation. Thus this
closes #69.
IO utility class: dispose context

Added a new ImgPlusCtxCleaningProvider. This RefProvider creates
references to ImgPlus instances. When the ImgPluses are garbage
collected and its reference dequeued, if there are no remaining live
ImgPluses, the context used to create this ImgPlus is disposed.

This helps to mitigate contexts that are eternal because they were
created anonymously, e.g. by creating a new ImgOpener in the IO class.

Thus the IO class now registers its ImgPlus instances with the
RefManagerService.
Merge branch 'cache-imps'

Adds new tools for managing references, and utilizes these tools to refactor
cache behavior. Removes the overriden finalize caching implementation and
OutOfMemoryError checks in favor of PhantomReference registration and polling.

Additionally, using the new framework many operations happen on separate
threads now, allowing for greatly improved performance under low-memory
conditions.