IfNode rewrite

This is probably messed up because I don't understand Scala.  By the time I developed an idea of what I was doing I thought some things might not be needed anymore, and may have gotten nasty in a few places (using null to avoid type mismatches between UndefLiteral and IfStruct)

In general, the theory I was trying to get at was that IfNode() should be somewhat recursive.  The Parser should build up the IfNode structure and send it.  If this were C I would say that else_node is a pointer to the next IfNode if it's defined (in this case, since it's an object it might be getting instantiated as the IfStruct is built and thus consume memory when it will never be executed.  We don't want that, but I don't know how to tell Scala about pointers)

Comments welcome.  This can certainly be trashed if it does a bad thing. :)