Big changes bundled together (not a good habit)

Factor out codes of BuilderMakerRegistry so that it focuses on a single
responsibility.  These three parts are more decoupled:
  * Sort the order of builder maker execution
  * Execute builder makers
  * Builder maker

This change also changes the variant API: Variant is like environment
now, and you may specify it on default/package/rule levels.

Finally, this change makes API layered: If you are not interested in the
variants stuff, you do not have to specify it and the scons_package will
not generate variants.