Improve project, country, and language list display

Use Language->commaList to localize list grammar, and whenever the list is
more than $wgNoticeListComplementThreshold of all elements, take the complement
and display as "all except ~LIST"

TODO:
* frontend magic to collapse and ellipsis

Change-Id: Ia9572f5b124e35a77d3ef896833e999e16c1510a
DO NOT MERGE: ghastly algorithm for displaying allocations

Find all groups of criteria sharing the same allocations, and partition into Cartesian products for display.

TODO:
* add logged-in status and bucketing
* see if the algorithm can be made more readable
* finish intl
* date filter and history rebuild

Change-Id: Id10b191bd46ce8c6776506644e4e20d983a6380e
WIP - experimenting with encapsulating allocation filters to simplify display logic

Campaign becomes a data container.
AllocationCriteria are introduced.  This is actually a sketchy abstraction, cos there
are many distinct contexts which require different behaviors: SimpleAllocationCriteria
are nothing but the tuple of criteria, so generate a filter which is a single Cartesian
product of criteria.  CompoundAllocationCriteria contain the result of more complex
inclusion / exclusion.  Any IAllocationCriteria can be represented as the sum of simple
products, for easier display and arithmetic.

Change-Id: If5c56cf69ce4e59ffc95115d05506663374d27d0