Refactored to make the design more clear

In this release,we cleared up some confusing bits, making the design
clear to readers.  See details below.

1. In domain.model.Part.cost(), the previous design passed the
collecting parameter, Cost, deep down to many objects.  This smelled of
“long chain of variable passing.”  Plus, that design also involved
providing a setter for Cost.

In this design we fixed this problem using double dispatch.  This
design also eliminated the explicit setter on Cost.

2. In the previous design, PartBuilder, which builds a part, already
took a part in its constructor!!  This awkward object confused the
readers.

In this design, PartBuilder takes a schema (instead of a part) in its
constructor.  It first orders and maps the part schema and values.
Finally, it creates Attribute objects out of these schema-value pairs,
and uses these Attribute objects to create the part.  This design is
much more clear.

4. Renamed variables, methods for clarity.

3. Finally, we added clean.py module to remove pyc files.  __main__.py
calls clean.py when run from command line.