[refactor] factor static content in containers into a separate provider classes

Theoretically shouldn't alter behaviour.  I tested, honest.

This is groundwork for having content filled from a directory.  It may also be useful for the drag n drop stuff @Fice is working on in #2684.

Linux needs build testing.  Win32 needs more project work in addition the listproviders filter (will do it tomorrow if someone else doesn't beat me to it).