WIP: support combiners for UDAs

- [x] Associate an optional decomposable state with UDAs; this guides the decomposition into local, remote aggregates
- [x] Expand decomposable UDAs in a new optimizer rule
- [x] Test a simple sum UDA using this new framework
- [ ] Plumb syntax for specifying combiners into the Myrial language
- [ ] More tests!
- [ ] Clean up redundancy between built-in aggregates, UDAs

Sanity tests appreciated.
stylistically I think we've been doing

```python
from raco.expression.aggregate import (
    DecomposableAggregate, UdaAggregateExpression)
...
```