First you need to create a series of promotions containing the bonuses that you want to apply. When you do so, set them so that they aren't available to any unit type. This prevents the AI/Player from being able to select it, but doesn't prevent it from being otherwise assigned.
Next, you need to do some work in Python. I don't remember exactly what it is at the moment, but there should be an event trigger you can hook into for when a unit is promoted. Your code would add the relevant promotion for the new level.
Also, you can design the promotions so that only one gets applied at a time to reduce clutter.
In other words, make PromoII be whatever PromoI contains and whatever extra you want. Then, in your python code, remove PromoI when you add PromoII.