Dissector driver: throw a custom exception instead of rethrowing IndexOutOfBoundsException.

That's more sensible semantics-wise, and also allows me to add a clarifying
comment regarding the improbability of such an exception.
Changed the dissector driver to use a dissector detector.

... instead of directly using a dissector. This paves the way for multiple
dissector support.
Added a real dissector implementation that matches magic bytes.
Switched the application to using the real detector.

Now the specific detectors become private, with the magic map being the
only entry point into the dissectors module.

Also, MDL is finally hooked up to the rest of the application.
Made dissectors.Common private.
Removed a useless variable binding.