Correctly implement node reboots

The previous implementation of node reboots, embarrassingly, showed off my
inability to read -- offering features that simply don't exist in IPMI, and
requesting the OS power off rather than reboot.

This replaces that with the correct version, using a hard power cycle to
restart the node on demand.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Make repository code Unicode aware

This updates the `filesystem_safe_name` code for repositories to handle UTF-8
correctly; the previous version would simply fail if non-ASCII characters were
present, thankfully making compatibility trivial.

The new code now handles two additional cases that the first version did not:
 * Unicode characters (UTF-8) now work correctly end-to-end
 * DOS/Windows reserved filenames are encoded to avoid failure

Unicode handling is done by more or less ignoring it: we use UTF-8 as our
filesystem encoding in Razor, so we pass through the characters unchanged.

Reserved characters, and filenames, are encoded URI style: percent encoding
with the hex value of the ASCII (aka UTF-8) character.  Only basic reserved
characters, and DOS special files, are encoded; Windows / NTFS reserved
filenames are handled by encoding the `$` character.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Include check for os_version in task inheritance

Per RAZOR-117: This adds extra verification that the child task's properties override the parent task's properties by checking os_version.