Wip/supplemental materials

Fixes #34

## Add supplemental material handling

This is a somewhat haphazard fix, in my opinion, but doing it in a better way requires refactoring request routing. That needs to be done soon, very very soon, but that day is not today.

To use this, simply add a slide with the classes of 'supplemental' and whatever type of supplemental material it is.

For example:
  `<!SLIDE supplemental solutions>`

This can be included in the same file as the labs, so this means that we can make each lab, its corresponding guide page, and its solution all self contained.

To access the supplemental materials, simply browse to: http://<host>:9090/supplemental/<type>

For example: http://localhost:9090/supplemental/solutions

## Added special tags for automagically including counters

* `~~~SECTION:MAJOR~~~` translates to section counter
* `~~~SECTION:MINOR~~~` translates to auto resetting in-section counter

This means that we can now replace our Lab/Exercise/Solutions headers with macros, such as:

* `# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Lab Title`

## Added file inclusion tag

Include a tag like `~~~FILE:fundamentals-4.1-solution.pp:Puppet~~~` and it will be replaced with the contents of that file, wrapped in the proper HTML to display it as code, syntax highlighted with the classes provided. The general case is these two forms:

* `~~~FILE:<filename>:<space separated list of classes>~~~`
* `~~~FILE:<filename~~~`

## Added pagebreak tag support

Any place you'd like an explicit pagebreak, in either .handout notes or in supplemental materials, simply include the tag `~~~PAGEBREAK~~~`.

Supplemental materials will now display the entire content in the browser preview instead of the first page only. You will need to print to PDF in order to have an understanding of where pagebreaks, soft and hard, will occur.