Accept collation variants, improve collation validation

This more correctly validates that collations are correct (e.g., it throws an exception for utf8_bin now), and can accept variants as the third value (e.g., zh__pinyin).