IfNode rewrite

This is a new attempt at the IfNode rewrite.  It now uses the Option[IfStruct] and has been rebased to sync up with the latest changes in master.  

Let me know if I did it wrong.  I've pretty well exploded my 'master' branch in my fork so I'm going to stick changes I make in branches from now on like I should have been.