Start implementing full text search, use ElasticSearch

I really have to refactor this soon!
Shutdown ElasticSearch on shutdown

Also:
- Add class FullTextSearchIndexer
- Inline insertUpdatePosts() and call indexNewPostsSoon()
Implement TenantDbDao.loadAncestorIdsParentFirst()

And return PagePathAndMeta rather than `(PagePath, PageMeta)`, and also
loadAncestorIdsParentFirstImpl() so ancestor ids can be put into the
PagePathAndMeta.
Index section page ids and site id, route and filter by site id.
Pass ancestorIdsParentFirst to PageNoPath(..).
When searching, term-filter for both site id and any section id.
Full-text-search asynchronously.
Add loadPageMetas(page-ids).
Include page titles in search results.
Highlight search result hits with "<mark>"

But this won't really work; there're other tags too, e.g. <small> or <h3>.

Also break out text constants.
Add Jsoup dependency and remove all HTML tags from search results

Then the resulting strings contain only <mark>...</mark> tags.
Handle the empty search phrase, don't die with a SearchParseException

ElasticSearch otherwise throws a SearchParseException, caused by a
QueryParsingException caused by a ParseException[Cannot parse '': Encountered
"<EOF>" ...].