v0.17.6 - gitfs, sudo, encoding handling, homebrew taps, and more.

- The experimental --git-fs option has seen a lot of changes. It commits a base snapshot before making any changes, handles systems with no git name or user set, and can run as any user provided that sudo is configured correctly (this is achieved via a GitRepo change that runs destructive repo commands as the repo's owner).

- BrewHelper can install and query homebrew taps now, thanks to ecin. (The code in BrewHelper makes too many assumptions about homebrew's internals, though; a refactor to instead use `brew info` is planned).

- Handling of externally originating strings has been improved thanks to a bug report from Schnittchen. Strings in unknown or invalid encodings will be coerced into UTF-8 so babushka can operate on them without hitting invalid characters. This shouldn't cause any corruption except on strings whose encoding is invalid, where inknown chars will be replaced with '?'.

- The #sudo helper has been much improved. It can assemble and escape correct shell commands properly now, which means sudo commands no longer have to be passed as a string; it will accept splatted commands just like #shell can, e.g.

    sudo('systemctl', 'start', service_name, :as => 'root')

- Fancypath#puts was added, which functions just like IO#puts: it appends its input to the file and terminates with a newline.

- Standard stream accessing was cleaned up to always use the constants (STDIN, etc) instead of the global vars ($stdin, etc), and to check the correct stream: for keyboard input and traps, STDIN; for colour detection, etc, STDOUT.

- The spec suite no longer includes the 'Babushka' module at the top level, which makes it mirror real usage more. Previously, it was possible for a namespacing problem to exist without the spec suite seeing it, since the Babushka module was always in scope when the test suite ran.