Allow modules to be extended

Custom modules can now be created using the extend method, and then attached to an Application. Documentation and tests were added for this new functionality.
Merge pull request #845 from jmeas/master

Extended `module` functionality