Redoing all of it

Turns out, go interfaces don't work the way I thought they do.
Redesigning everything from scratch again.