Pluggable exporters

This changes the code of exporters so that instead of hardcoded hierarchy of classes and method overriding it is more like an interpreter where the steps to be taken are given in a (nested) `HashedCollection`.

This allow easier changes of the actual exporting process, mixing more different steps into one "recipe".

Used in requirejs branch to have different exporters easily.