Extension:MassMessage/Page input list improvements/Progress reports

Current project status

 * The new backend is functional and delivery works, along with basic list creation / editing UI
 * Work starting on a more user-friendly UI
 * To be worked on in ContentHandler code:
 * Caching
 * Tests

Progress reports

 * Community bonding report
 * /May

Week of June 2

 * June 2: Added some i18n strings, started work on processing user input for the special page.
 * June 3-June 4: Finished basic raw watchlist editor-like list editor. User input is parsed and stored as JSON, with invalid titles and duplicates removed.
 * June 6: Added validation for list contents.
 * June 8: Implemented basic display of list contents.

Week of June 9

 * June 9: Submitted.
 * June 11-June 12: Added a wikitext description field and rewrote the code for displaying input lists; refactored some logic.
 * June 13: Added handling for empty lists; escaped i18n messages.
 * June 14: Overrode "Edit" link for delivery lists; added logic for updating links table.
 * June 15: Documented current code; standardised terminology with MassMessage.

Week of June 16

 * June 16-June 17: Split out list creation into a separate special page and rewrote some of the code related to list creation and editing; updated i18n messages; combined new backend code with the main extension.
 * June 18: Added message documentation; fixed issues raised in code review; merged.
 * June 19-June 20: Added links for external targets; changed code to create content objects through ContentHandler; improved validation; added ability for MassMessage to deliver to lists using the new format.
 * June 22: Improved validation and error handling; minor tweaks.

Week of June 23

 * June 23: Simplified MassMessage::normalizeTargets; addressed issues brought up in code review of previous patch.
 * June 24: Worked on improving error handling in Special:EditMassMessageList (code abandoned).
 * June 25: Changed error handling in Special:EditMassMessage, rerouted list creation and editing through API.
 * June 26: Changed list content display to use the Html class for HTML generation.
 * June 27: Added ability to import targets from an existing list or category and refactored code for getting targets ; made site handling more consistent in list storage.