Add dist_upgrade Fabric action

Adds a dist_upgrade() function to run `apt-get dist-upgrade` in
non-interactive mode.

Command-line switch for apt-get are as follows:

- `--force-confdef` and `--force-confold` instruct `dpkg` to choose
  the default action when faced with installing a new version of a
  configuration file rather than keeping the old version. If there is no
  default, in which case `dpkg` would usually prompt for a choice,
  prefer to keep the old version of the file.
- `-y` assumes yes to prompts such as whether to proceed with the
  upgrades.
- `-q` reduces the output and omits progress indicators.
- `-u` will print the list of packages to be upgraded, useful for
  logging or later verification.
Prompt for confirmation before dist-upgrade

Prompt for confirmation before proceeding with `apt-get dist-upgrade`,
which can be a dangerous operation.

This will prompt until the user hits Ctrl-C, which is not the most
user-friendly but can be iterated on later.
add `ntpq -p` output to ntp.status
Do the right thing when creating statsd counters

You don't need to specify an initial "stats." prefix when creating
statsd counters, since statsd will do that for you. However, this means
that if you *do* add such a prefix, you'll end up erroneously creating a
counter with the name "stats.stats.foo" instead.

This commit strips a leading "stats." prefix if one was specified, but
doesn't error if one wasn't.
Merge pull request #26 from alphagov/63458372-dist-upgrade

Add dist-upgrade task to apt.py
Merge pull request #27 from alphagov/more-info-in-ntp-status

add `ntpq -p` output to ntp.status
Merge pull request #28 from alphagov/dtrt-statsd-counters

Do the right thing when creating statsd counters
Remove RUBYOPT var from Puppet runs

This is no longer needed per gds/puppet@0e23694
Use govuk_puppet for Puppet runs

It is now more important that we use our wrapper script instead of the
vanilla `puppet` binary because it handles:

- Ruby versioning through rbenv (gds/puppet@4995ab2).
- Nagios passive checks (gds/puppet@8a7e61e).

It already applies the arguments `agent --onetime --no-daemonize`.
Add environments for platform1

Platform1 production and staging. The `all` selector/task will fail with the
following until hosts entries are fixed for asset-master and asset-slave in
Pivotal [#65086976]:
```
paramiko.ChannelException: Administratively prohibited
```
Merge pull request #30 from alphagov/puppet_commands

Use govuk_puppet for Puppet runs
Merge pull request #31 from alphagov/platform1_environments

Add environments for platform1
Add nagios.loadhosts task

Add the ability to load a host list based on service status in Icinga.
Prompts for the URL because it can't be safely passed using CLI arguments.
Also prompts for confirmation of the loaded hosts, for safety.

Example usage to fix all NTP alerts (in a new environment only!):
```
(fabric)➜  fabric-scripts git:(master) ✗ fab p1production nagios.loadhosts ntp.resync
Icinga URL (jsonformat): https://nagios.p1production.alphagov.co.uk/cgi-bin/icinga/status.cgi?search_string=ntp+self-reported&limit=0&start=1&servicestatustypes=29&jsonoutput
```
Merge pull request #32 from alphagov/nagios_loadhosts

Add nagios.loadhosts task
Require a reason when disabling Puppet

So that we can keep track of why Puppet has been disabled on a host.

Example usage:
```
(fabric)➜  fabric-scripts git:(puppet_disable_reason) fab preview -H jumpbox-1.management puppet.disable:'dcarley testing'
[jumpbox-1.management] Executing task 'preview'
[jumpbox-1.management] Executing task 'puppet.disable'
[jumpbox-1.management] sudo: govuk_puppet --disable "dcarley testing"
```

Example output:
```
(fabric)➜  fabric-scripts git:(puppet_disable_reason) fab preview -H jumpbox-1.management puppet:'-v'
[jumpbox-1.management] Executing task 'preview'
[jumpbox-1.management] Executing task 'puppet'
[jumpbox-1.management] sudo: govuk_puppet -v
[jumpbox-1.management] out: Notice: Skipping run of Puppet configuration client; administratively disabled (Reason: 'dcarley testing');
[jumpbox-1.management] out: Use 'puppet agent --enable' to re-enable.
…
```
[#65294674] Use underscores for class names

To match gds/puppet@88993ca
Merge pull request #34 from alphagov/65294674-class_underscore

[#65294674] Use underscores for class names
Merge pull request #33 from alphagov/puppet_disable_reason

Require a reason when disabling Puppet
Task to tell you what security upgrades havent been installed
Merge pull request #35 from alphagov/security_updates

Task to tell you what security upgrades havent been installed