Split fails on branching expressions

Expressions like the following need to be turned into a single line expression before using split.

    s = symbol('s', 'var * {x: int, y: int, z: int}')
    expr = s.x.sum() / s.y.sum()

E.g. this looks like the following

```
  | 
 / \
 \ /
  | 
```

Making split handle this well is probably hard.  It's likely easier to make a new function that remove intermediate branches to expressions that look like the following

```
| 
|
|
|
```

This is possible with expressions like `Summary` and `Broadcast`.  It might be possible to roll this into the work of broadcast optimize.