Interfaces for everything

Nothing has been implemented very well, but this should be good enough
for prelab