Organise header files

Create suitable header files for each of the different types required to
support the type safe visitor pattern model.