Remove first argument to `by`

I've tried to make all the changes to remove the first argument to `by` from discussion in #517 

Lots of small changes in many files, so, it's likely that I forgot something.
So, I'd actually suggest leaving `By` as is. 

Instead, we can change just the frontend function `by` as follows

```Python
def by(grouper, apply):
    child = common_subexpresion(grouper, apply)
    return By(child, grouper, apply)
```

I think that'll be a relatively simple change that won't cause too much havoc with the `compute_one` implementations