Switched over to case class Expression tree

This is to allow for easier pattern matching.  Also moved named
expression methods into their containing trait so that the
"stackable trait" pattern can be employed to refine their definitions.