Rewrite DB campaign storage
This patch throws the old uw_campaigns table out the window and
instead adds the mu_campaign table, with a slightly different schema.
All uses of the old table were removed.
There is now a core-inspired DBAL layer that should keep most of the
DB mess away from application logic. The new classes should allow
for relatively painless removal of the old UploadWizardCampaign
class. Its responsibilities were split into three new classes:
- CampaignContent for an abstraction over the content of the page the campaign is on.
- CampaignRecord for representing a DB row for easier and faster retrieval of information related to campaigns.
- CampaignParsedConfig for parsing and accessing the config.
What is missing for now is a migration script for rebuilding the
table when upgrading from UW, but that will be resolved in T285236
Tested most of the functionality manually, seems to work. Follow-up
commits will do more refactors in the entire codebase.