Introduce Arcs and refactor accordingly

This should ultimately take care of #18, #21, and #29. There's a lot of moving things around to do here.