Shortcode rewrite

This commit contains a restructuring and partial rewrite of the shortcode
handling.

Prior to this commit rendering of the page content was mingled with handling
of the shortcodes. This led to several oddities.

The new flow is:

1. Shortcodes are extracted from page and replaced with placeholders. 
2. Shortcodes are processed and rendered 
3. Page is processed 
4. The placeholders are replaced with the rendered shortcodes

The handling of summaries is also made simpler by this.

This also introduces the distinction between shortcodes that need further
processing and those who do not:

* `{{< >}}`: Typically raw HTML. Will not be processed.
* `{{% %}}`: Will be processed by the page's markup engine (Markdown or
(infuture) Asciidoctor)

The above also involves a new shortcode-parser, with lexical scanning inspired
by Rob Pike's talk called "Lexical Scanning in Go", which should be easier to
understand, give better error messages and perform better.

Fixes #565
Fixes #480
Fixes #461