Refactor slim/html5 templates using Helpers

I’ve refactored Slim templates for HTML5 backend in order to separate most of logic into helpers, make templates more clear, simpler and “DRY”.

This PR includes seven previous (not yet merged) PRs and also some future changes/fixes. I’ll rebase it later to make it more clear, so consider this PR just as a preview for review. The most important commit is [this](https://github.com/jirutka/asciidoctor-backends/commit/d7dce1b40b7e9479ab84253113194f2619780eb9).

I depends on changes in the upcoming Asciidoctor 1.5.2.
After thinking about it some more, I realized you are correct. We're not even using direct field access in the built-in converters, so doing it here is not consistent (putting aside whether or not it's good practice).

I'm not religious about direct field access if I consider it to be part of the public API. In this case, I do consider properties like "id" to be part a concrete part of the public API. However, as I just mentioned, this is not how we are accessing the property values in Asciidoctor core, so we shouldn't be doing it here.

While using the `id` syntax does allow us to encapsulate the field in the future, I have no intention of doing so. But writing it this way is still correct, so :+1: