Validation, duration, refactoring

- Players now are validated to prevent malicious code through
MMLPlayer.Settings and ABCPlayer.Settings.
- Players now use StreamReader instead of TextReader when loading.
- Players now calculate their duration as part of validation, which is
stored in the Duration property.
- Refactored code into MML and ABC namespaces.
- Midi player should no longer crash on exit.
- Midi player should no longer keep the midi device open when a file
fails to load.