Preserve permissions and ownership for files stored as strings

Files that are stored as strings bypass the permissions code added
in commit 74c1476 since they are added to the archive via
add_string().

Add a check to see if a destination exists in the host file system.
If it does propagate the permissions to the stored string's tar
record.
Fix exception when sar module enabled on system without sysstat

The sar module assumes that /var/log/sa exists when it is enabled.
Check for its presence and exit from setup early.
Add /etc/locale.conf to i18n module
Add /etc/localtime to general module
Fix typo in i18n module
Make TarArchive preserve permissions and SELinux context

Make the TarArchive class preserve permissions and SELinux context on
all files and directories it collects. This requires us to recursively
add the parent directories of any files copied in by full path (or the
directory would only be implicitly created and so receive default
ownership and permissions and no SELinux context).

To make this work, don't call tarfile.add() to recursively add
directories - the doCopyFileOrDir machinery in the Plugin class already
handles directory recursion properly. Instead when a directory is passed
to add_file(), just create a TarInfo record of type tarfile.DIRTYPE and
propagate the permissions from the host file system.

The SELinux contexts have the unfortunate side-effect of spewing errors
if unpacked without --no-selinux as some contexts cannot be placed on
some file systems.

It may be more useful to eventually store the contexts in the
in a file rather than directly in the tarball.

Before:

drwxr-xr-x.  9 root root  640 Dec  7 00:57 proc
lrwxrwxrwx.  1 root root   30 Dec  7 00:57 ps -> sos_commands/process/ps_auxwww
drwxr-xr-x.  2 root root   60 Dec  7 00:57 root
drwxr-xr-x.  2 root root   80 Dec  7 00:57 sbin

After:

dr-xr-xr-x.  9 root root  640 Dec  5 19:07 proc
lrwxrwxrwx.  1 root root   30 Dec  7 00:58 ps -> sos_commands/process/ps_auxwww
dr-xr-x---.  2 root root   60 Dec  7 00:48 root
dr-xr-xr-x.  2 root root   80 Dec  7 00:57 sbin

More fixes issue #76
Remove stray debug code in copy_permissions_filter()
Make sar module more robust

Make the sar module more tolerant of broken environments and users
force-enabling the module when its own enabled check fails.
Obscure password in /etc/keystone/keystone.conf
Remove obsolete sysreport references from sos.spec
Move sysctl collection to kernel module and add new locations

The sysctl configuration and state belongs to the kernel. Reflect
this by moving the collection of sysctl.conf to the kernel module
(where sysctl -a is already captured) and add collection of the
/etc/sysctl.d and /lib/sysctl.d directories.
Add systemd module

Add a new module to collect systemd information. This is the start
of a general re-organisation of the init related information
captured by sos.

Initially collect systemctl and journalctl command output as well
as (some) configuration files owned by the package.
Fix typo in systemd module

Forgot to refresh the copy of the module in HEAD; pickup two
additional fixes added in testing.
Do not attempt to store SELinux context for /proc and /sys

Storing a (correct) SELinux context for files in procfs and sysfs
leads to tonnes of ugly spew when the tarball is unpacked as these
contexts are not permitted on "normal" file systems:

tar: sosreport-rhel7-vm1-20121210145629/proc/sys/vm: Cannot setfilecon: Permission denied
tar: sosreport-rhel7-vm1-20121210145629/proc/sys/vm/percpu_pagelist_fraction: Cannot setfilecon: Permission denied
tar: sosreport-rhel7-vm1-20121210145629/proc/sys/vm: Cannot setfilecon: Permission denied
tar: sosreport-rhel7-vm1-20121210145629/proc/sys/vm/scan_unevictable_pages: Cannot setfilecon: Permission denied

Etc.

Check for these path prefixes in TarFileArchive.add_file() and skip
generating a pax header for them.

This isn't a perfect fix; it may be better to move this up to a
higer layer (i.e. within the Plugin class's file handling routines)
and also to filter by context rather than path (since SELinux
contexts are a property of an inode not a path and a user could
mount these file systems at other locations).

This partially fixes Issue #79 but I'll keep it open for the time
being to track these improvements.
Remove diagnose() methods from plugins

Delete the diagnose() methods from all modules still using it.
The diagnostics feature never worked well and is better implemented
to run after-the-fact on the data collected in the tarball.
Delete selinux module's analyze() method

The analyze machinery hasn't been hooked up since commit 6ea48cb.
The use of these methods has also not been especially clear: some
modules trigger additional file/command collection here while
others only add alerts (the original purpose of analyze()). Other
module call the addAlert() interface from their setup() method.

Move the SELinux module's analyze functionality into the main
setup() method but make it conditional on setroubleshoot being
installed as it's necessary for the current implementation.
Delete kernel analyze() method and add more sysfs module files

The analyze methods are no longer used and the kernel module's
regex-table based taint checking is kinda klunky and a maintenance
problem.

Delete this code but collect the initstate, refcnt and taint files
from /sys/modules/*.
Remove analyze() method from yum module

The yum module's analyze method is pretty useless. It just checks
for extra /etc/yum.repos.d files on RHEL systems. Delete it.
Remove diagnose() wiring

Complete the removal of the diagnose functionality by removing the
methods in the Plugin class and sosreport module, command line
options and documentation.
Remove analyze() wiring

The analyze() methods haven't been used since commit 6ea48cb and
their functonality has now been moved or removed in all modules.

Delete the last bits of wiring and docs references.