Re-structured code to have inheritence, and follow DRY principle

While some of the parsing code isn't 100% dry, any duplication in code
was done to deal with future changes to the webpage and/or potential
edge case handling.

The code restructure can be seen in documentation/code-structure.pdf  I
pulled out some of the duplicate methods and pushed them into a
core_api class which is inherited by oscar_api and core_curriculum_api.