moving struct definitions to internal files

this restricts access to internal structural elements to
subclasses only. subclasses require the struct layout to be defined
when computing the size and layout of the subclass struct itself.

refs #153