More alignment of data structures to DIDL

The first step in implementing my comments on #231, and on the way to a fix for #226 and #227

It begins to align the data structures more closely to the DIDL spec. This gives us more future flexibility, removes some subtle bugs, and should generally make life a little easier :grinning: 

Some ML classes have been renamed, but you should not notice any real difference. Some unnecessary classes have been removed. The MS data structures moved to their own module, and will require further work (but they should work just as well as they did before).

Event code still not fixed, but please test and report any problems.  In particular check adding to queue, and adding URI's please
I like to sneak in a metaclass when I can!