Add promotion logic for arithmetic ops

This is in advance of some numba experiments
Does this match numpy behavior?