add --software option, disable recursion for --try-software(-X)

fixes for #945 and #1024

@stdweird: please review
but `stop_msg` is ugly.
instead of building `stop_msg`, do a `log.warning` and keep a counter for each a warning raised. then, `if counter`, do a `log.error` with `Found %s problems validating the options, treating the above warnings as fatal.' % counter`