Allows SIGINT to interrupt running tests.
Generalizes 'Unit' and differentiates 'Package'.

This commit enhances 'Unit' to support the 'components' method.  This paves the
way for future implementations of 'Unit' to implement their own 'component'
set, and not just be limited to 'Group's.
Adds tests for 'ninja()' in 'commands.py'.

This commit also changes the implementation of 'ninja()' to be somewhat less
ad-hoc, thus making the tests look reasonable instead of written to make the
existing implementation pass.