Make navigation menus reusable

This change introduces a reusable pattern to create dry menus.

The downside is a *lot* of whitespaces between block elements in the output HTML. After gzip the size increase is not noticeable.