Visitors and type recognition added

Moved to visitors for manipulating the tree.
  -- node.str and node.repr use visitors.Printer
  -- node.reduce uses visitors.Reducer
  -- node.replace uses visitors.Replacer

  Why? I didn't want to end up with a node class
  that had a hundred long methods on it.

Added some experimental type recognition support and tests.
  -- parsing/expression_types.py includes the types of expressions
  -- parsing/recognition.py has the Recognizer visitor

  This is nicer than I anticipated, so it'll probably stay in.
  Recognizer is good at identifying constant, polynomial, rational,
  and equation expressions for +-/*. Many expressions don't have an
  obvious type, so the Recognizer returns UnknownExpr by default.

  Eventually, every node should have an attribute that tells
  what type of expression it is.

Additionally, fixed a parsing bug

  "1 = (2) * (3)" parsed to (I think):
    *
      3
      =
        2
        1
  That is, the equals operator (precedence zero) should have
  been at the root, but the multiplication operator was.
  The bug was in Parser.to_rpn:
    BEFORE: Everytime I saw a right parens, I would pop everything
            off the stack up to and including the first left parens.
            Then if there is a GeneralOperator on the top of the
            stack, I move it to the output stack.
    AFTER: I do the same thing when I see a right parens, but
           only pop off a PrefixOp, not a GeneralOperator.

  I added a test case for this. Not sure if this won't cause other
  problems, but all the tests still pass.