Experimented with interfaces and implementations.
Figured out a slightly better way to specify requirements for require.js.
Turns out, node modules don't load in karma because karma runs code in a browser. Will probably try switching to browserify next iteration.