Adding feature/new_oop branch.

This should be the right branch. See previous pull request comments for details.

TLDR: start with the spec_*.m files to see package behaviour.