Rework library to follow assignment guidelines.

Reworks the library to simplify the architecture and follow the
specifications set out in the assignment.

Removes dependencies on the STL.