[#52118601] Import stock hosts(5) from Ubuntu

Copy and pasted from a stock Ubuntu machine. Includes one entry,
`ip6-allhosts`, which we didn't have before. I'll use this as a base for
converting our `host{}` resources.
[#52118601] Manage /etc/hosts as a file resource

Convert all `/etc/hosts` entries from `host{}` resources to a single
`file{}` resource. This will ensure ensure that our FQDN entry always
appears in the correct position and that `hostname -f` will work as
intended.

As a result, we can no longer support the `purge` param. It is implied (and
documented) that this will remove any existing entries. It won't be possible
to use this in conjunction with any `host{}` resources. For the opinionated
reason that you should be using DNS instead.

Per the previous commit, this also introduces one new entry for
`ip6-allhosts`. This is from Ubuntu stock.
[#52118601] Warn if $::fqdn is missing

If the existing hosts(5) file is botched and doesn't contain an entry for
FQDN then facter(1) won't report the `$::fqdn` variable and the hosts file
can't be fixed automagically by Puppet. You will need to rectify it by hand,
ensuring that `hostname -f` and `facter fqdn` work correctly.
[#52118601] Fix condition for Puppet 2.7

It appears that 2.7 renders a `nil` fact to something that satifies neither
`!$var` or `$var == ''`. However interpolating it in a string does result in
an empty string, so I'm going use that as a fallback.
[#52118601] Fix quoted variable lint warning

Use `inline_template()` to render the FQDN fact to a string and then test
whether it is empty. Extension of the previous commit. Fixes the following
lint warning:

manifests/init.pp - WARNING: string containing only a variable on line 21

I did look at using `empty()` from puppetlabs-stdlib. But even that raises
the same lint problems when you try to pass the FQDN variable in.
Merge pull request #1 from alphagov/52118601-convert_to_template

[Fixes #52118601] Convert /etc/hosts to a template