Codesmithing.
Extract error message into its own method.
Return errors instead of raising an exception.

CommandLineParser#parse now returns two values, an instance of
CommandLineArgs, and a hopefully empty list of errors.  This is
now consistent with DataReader/DataParser and LayoutBuilder.
Rename SMELL comment to TODO.
Add '# private' comment.

Attributes, #initialize, and #build in ChartBuilder should ideally
be private.
Convert ChartBuilder from a class to a module.

Simplified the code.