simplify parser

Change parser to build the tree by adding new nodes that don't modify anything below them in the tree.
  e.g. p[0] = p[1] + [p[2]] instead of p[1].append(p[2]; p[0] = p1
Get rid of PyOpt{Func,Class,Interface}Defs because they only encapsulate a single list and add no value (but do add clutter).