Bug 7924

Fix for #7924 that also includes some additional unittests and the ability to output straight to JSON.

The real problem was the way that shlex handles Unicode strings. The fix was to convert to ASCII before sending to shlex. This should be safe because AS filters should never have characters that aren't in the ASCII code space anyway.

In the process I added some unittests and some support features around them. As result, compass.py now allows printing straight to JSON and supports using custom datafiles (i.e. ones not named 'details.json').