Make SystemCommand escape arguments

Previously, SystemCommand executed shell commands in string form which
forced the caller to escape the command.  This patch changes this
behavior so that arguments are passed in a list and thus also escaping
the command properly.

The testing facilities required the most change as they require an
exact command -- escape characters and all.  It may be worth
revisiting in this in the future to allow for fuzzy matching of the
command strings to ease the writing of test cases.