Refactor expression nodes to be less branchy
Better test coverage for expressions