Support file lists better

These changes introduce some double dispatching that allows the code to
convert lists of files into a list of separate drop events. Right now it is
a little hacky in that it decodes file extensions and creates different drop
events as needed. This is not as clean as envisioned. We should think of
better approaches.