Refactor request validation

Refactors validation of request options to remove requirement for hardcoded options at the level of request classes. Its not as clean as I'd have liked, due to the heavy reliance on class level stuff in the original code, but its more flexible than what was there before.

1) New Library Types can be added without re-deployment.
2) No need to subclass for every read length

TODO: We should probably switch to having library type associated with the request metadata, rather than included as a string. This will have an impact on reporting however, not to mention require a lengthy data migration.