Server: deal better with changing page structure.

This is still far too tied to a particular page layout, but it won't die
now.

Fixes #151.  (With improvements to come)
Server: clean up file cache loading somewhat.

This makes a more straight-forward path through the code to understand
what is happening.

Also more commenting on the files themselves, to make it easier to
review in-browser.
Server: further refactor cachefile handling.

This is still not _exactly_ what I want, but we're getting closer.
Server: further streamline caching structure.

This allows for a much better experience when working on a slow link.

- Allow caching of everything (including perl module status and HTML
  pages) for 4 hours, by default.
- Provide an option to change the cache lifetime (-c=0 is more or less
  equivalent to -f)
- Store un-changed files in cache, updating them just before preparing
  to serve.
- Always read from cached file, which helps ensure they will be
  reusable, even when the force is on.

Still a problem: country.json
Server: still better caching information.

- Make it possible to recognize paritally downloaded files, exiting
  and removing them from the cache.
- Add Term::ProgressBar for download tracking.
- Replace die with exit_with_msg.
- Update exit_with_msg for better visual on multi-line messages.
Server: do not trust things external things in the dist-cache

Only copy over files without external soruces (notably duckpan.js, at
present)... everything else is either gotten fresh or cache-checked.

I don't even know how these managed to get distributed to me, but ah,
well.
Server: clean up output a bit.

Also:

- Remove now incorrect comment.
- Simplify the external/dist logic a bit.
Config: clean up path separation.

This straightens out the directory structure, while also expanding the
application of path().
Server: store assets on a per-host basis.

If you're changing the hostname, you're probably looking for
different assets.

Also, look for new gruny-style filenames which addresses #151.
Remove old filenames from regex, switch around base and duckpan
Merge pull request #152 from duckduckgo/mwm/missing_files

Server: caching improvements
duckpan: fail on missing include directory.

Using realpath instead of user-entered string, in order to possibly help
them spot the problem.

Addresses #156.
bin/duckpan: give them the absolute path, if we can't get realpath

I still think the realpath is more useful, but if throws an exception,
just go with absolute.

The absolute is not in a `catch` block, because we lose our `$_`.  If
this was any more complex I would write it a different way.

Also, split out into to sub-tests.