(#14297) Handle upstart services better

The previous changes to the upstart provider didn't take into account services
that may have upstart jobs in /etc/init with no corresponding symlink to
upstart-job in /etc/init.d. This fix adds /etc/init/$service.conf to the search
path in the upstart provider.

In order to allow upstart to use debian as its parent, this commit adds methods
for enabled?, enable and disable. Without this fix, using a debian style init
script on ubuntu requires manually specifying the debian provider be used.
With this commit, the upstart provider can be the default for ubuntu and
still fail up to its parent, debian.

The enabled?, disable, and enable methods are complicated because upstart has 3
behaviors to account for. Upstart < 0.6.7 have only the conf file and start on
stanzas to worry about, 0.6.7 < upstart < 0.9.0 has a manual stanza which
removes any previous start on declaration, and upstart >= 0.9.0 has an override
file. In upstart >= 0.9.0, the provider does all of its work using override files
to leave the upstart conf file for the service intact and unchanged.

Because of the need to know which upstart version is being used, this commit
also adds a method and a class variable to hold and access the upstart version,
obtained by a call to `initctl --version`.
(#14297) Update spec tests for upstart provider

This commit adds tests for the upstart provider to verify that it has the
enableable methods and that it behaves correctly with various versions of
upstart. The tests include multiline start blocks, manual stanzas, and override
files.
(#14297) Add acceptance test for upstart provider

This adds a simple upstart provider test to the acceptance tests. It has some
basic service cases to consider, including an upstart job with a symlink in
/etc/init.d, an upstart job with no symlink in /etc/init.d, and a init script
that is not an upstart job. The test was graciously supplied by Justin Stoller.
(#14297) Clean up upstart provider and tests

This commit eases readability of the changes to the upstart provider, breaking
functionality into helper functions where appropriate. The spec tests were
similarly cleaned up.
(#14297) Update upstart provider acceptance tests

Previously this test would grep the status output to determine the status of
the service. That works for upstart services, but not for init style services.
For those the return code of status must be checked. This commit adds a wrapper
function to handle using the right method to determine the service status.
(#14297) Define agent in upstart acceptance test

agent wasn't being passed into the helper function in the upstart acceptance
test, so this adds the agent variable to the method and passes it in when
called.
(#14297) Don't remove tty1 or rsyslog during upstart acceptance

Previously the upstart acceptance would try to remove the tty1 and rsyslog
packages, which could cause unexpected behavior in the acceptance tests after
the upstart test was handled. This also removes apache after the test
concludes, but leaves tty2 and rsyslog intact.
Merge remote-tracking branch 'haus/ticket/2.7rc/14297_handle_upstart_better' into 2.7rc

* haus/ticket/2.7rc/14297_handle_upstart_better:
  (#14297) Don't remove tty1 or rsyslog during upstart acceptance
  (#14297) Define agent in upstart acceptance test
  (#14297) Update upstart provider acceptance tests
  (#14297) Clean up upstart provider and tests
  (#14297) Add acceptance test for upstart provider
  (#14297) Update spec tests for upstart provider
  (#14297) Handle upstart services better