Suppress error msg when a hard factor doesn't parse

The prior version would attempt to parse any assorted argument,
including a filename, as a hard factor, and print out a message if it
didn't work. This commit suppresses that message and just prints out
a generic "argument not recognized" message for any argument that
the program can't figure out.

The parsing routine now throws an exception when a hard factor fails
to parse, so that calling code can make a more intelligent decision
about how to handle it.