Add ambiguous collation exception, fix various other collation problems

Specifically, this PR
  1) adds an exception for ambiguous collations (e.g., en_ci),
  2) actually validates locales, instead of just appearing to validate them,
  3) moves the logic for parsing collation schemes and creating RuleBasedCollators out of AkCollatorFactory into its own class,
  4) enables general ICU keywords+values (and throws an error when they aren't valid), and
  5) creates a canonicalized version of the collation scheme.
Collapsing this down and using final when possible sounds good, but I was using case/accentSensitive == null to check whether they'd been set (for ambiguity checking, etc.) -- would that not be okay style here?