CLN: annotations in core.apply
make `apply_broadcast` have consistent signature.

After this I plan to do a pass to make these classes much less stateful
updated the abstractmethod thing.  didnt change Iterator-> Iterable because i still have a mild preference, but will if its a deal-breaker. cool