Improved foldl and foldr

- `foldl` now adopts a type stable procedure and can specialize on common operations (e.g. `+` and `*`) like `reduce`
- `foldr` also adopts a type stable procedure
- with the improved `foldl`, the general part of `reduce(op, itr)` can be delegated to `foldl`.