implement promotion properly.  Completely rewritten, old code was just broken.
implement promotion properly.  Completely rewritten, old code was just broken.

zachsully/hakaru,zaxtax/hakaru,zaxtax/hakaru,zachsully/hakaru