Fleshed out classes, beginnings of core algorithm, unit tests