Reformat promotion generation

Use the same template of other pawns moves generation,
make the code more uniform, simplify generate_promotions
that has now been renamed, and I am even able to measure a
small speed up of 1.5% on a bench run.

No functional change (verified also with perft).