add a base Role class
change Page to a role

This reduces some of the duplication between the two Page classes.

Fixes #5
add some missing documentation to Page classes
attribute -> attr