Major sysctl::value rewrite.

Bugs fixed:

* On linux, `sysctl::value` edited `/etc/sysctl.conf`, then skipped running `sysctl` if the edit succeeded (which it nearly always did). This is fixed; the `exec` resource for `sysctl` now checks whether the sysctl setting is actually set to the desired value by calling `sysctl -n KEY`.

  This looks reasonably portable between at least Linux, OS X, FreeBSD, and OpenBSD, since all of them support `sysctl -n KEY` for obtaining current values without names.

* `sysctl::value` formerly used `grep` to parse sysctl config files and output. This lead to a number of edge cases, since `.` is a regexp metacharacter for grep, and since the output format of sysctl is not well-standardised with respect to whitespace. Using `sysctl -n` and `test` to examine the current state is more resilient to odd sysctl settings.

* I've removed the `suppress` option entirely, as it only worked on Linux and could only be used to mask bugs. If you are setting nonexistant sysctl values, stop doing that.

* I've generally improved this module's shell hygiene by using `shellquote` pervasively. This isn't perfect, and I suspect there are inputs that cause the `$unless` test to produce bogus commands, but it's generally a lot less likely to go wrong when faced with `$value`s containing quotes or whitespace.