Refactor view controllers to pull out common code

All the arrow controllers are doing the same thing - so pull it out into
an abstract base version, and then re-implement the individual VCs as
extremely light-weight subclasses