Refactor new Viewer drag and drop code.

To keep Viewer as lean and flexible as possible, drag and drop code is now it's own utility class, ViewerDropHandler, which allows users to add drag & drop support in one line of code.