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.