Fix sass regex check and swap exec for spawn on child processes.
Refactor lexer to separate presentation from AST

Currently there is no clear separation between the AST and the template
uesd to present the documentation. Presentation code is embedded in the
AST quite early on.

This is problematic firstly because the code cannot be unit tested and
therefore refactored with ease, and secondly because a much requested
feature request is for custom templates, for which the data and
templates need to be fully snd clearly separated.

This commit simply refactors the code that is already there to try and
separate out these areas. The existing tests have been made to pass and
some simple documents build, but despite that, this commit can be
considered unstable.

Future commits will complete the separation into stages and add full unit
tests for each stage.