WIP: Viewer returns overlays

See discussions in the [mailing list]() and in a [prior PR](#805) from @tonysyu. This implements my idea of having plugins return an (overlay, data) tuple.

Questions:
 - should the base plugin return `(image, None)` or `(None, None)`?
 - should we specify the `overlay` data type to always be ubyte, float, or whatever? My personal take is that it would be too limiting, and the only restrictions on the overlay are that it be the same shape as the input image.
 - should the `data` field be restricted to arrays or should it be allowed to be any arbitrary object?
 - is there a way to do automated tests on this?

Anyway, as a teaser, the `OverlayPlugin` currently returns the overlay and it works like a charm! =D