ExporterManager: add an explicite extension point
Prior to this change one would extend the export menu by pushing directly to an array. This comes with several issues:
- The interface isn't actually controlled by us and is incredibly large.
- We can't document the interface in a structured way(with for example JSDoc).
- Extensions ability to modify the menu isn't limited.
This change does not break existing interfaces as the underlying array is untouched. Some extensions do more than pushing to the array, however, that could be considered a side effect of the interface rather than an intended feature. If there are legitime use-cases beyond pushing additional extension points could be added.
PS this should not be squash merged.
I updated both commits to reflect your feedback @tfmorris. The only additional change is that I explicitly named the functions *After as the other menu extension points will need both *Before and *After versions so it makes sense to name these similarly.
@tfmorris, do you have any additional comments? I think your approval might be needed here before we're able to merge.