initial decoder refactoring.

this should make the whole decoder business easy to maintainable.
currently this change is available to Korean and Japanese codecs.
fixed a stupid bug on Shift_JIS EUDC decoder.
additional refactoring work for Chinese encodings.

this also keeps up with the recent WHATWG spec changes, including
a merge of GBK18030 with GB18030.
bumped the copyright year for substantially changed files.
reencoding trap now depends on the *current* encoder state.

previously it didn't depend on the encoder state at all, resulting in
the incorrect output when the encoder has a complex state.
this directly affects ISO 2022 encodings in the development.
language changes: std::cast is merged to std::mem.
generalized the stateful decoder DSL to support non-ASCII-compatible decoders.
more DSL support for generalized stateful decoders.
further DSL tweak.

- the last codec error is now stored in the intermediate context,
  so the state machine can use a code like `ctx.err(..), S1(ctx)`.
- fixed a performance regression due to the decoder generalization.
  the decoder performance should be on par with hand-written one
  (less than 10% difference) with `--opt-level=3 -Z lto` rustc flags.
generic context methods are no longer necessary; eliminated them.
added ISO-2022-JP support.
added HZ encoding. this completes support for all WHATWG encodings.
fixed Shift_JIS encoder not to return unexpected EUDC codes.
added more benchmarks to CJK encodings and UTF-8.
applied some optimizations to UTF-8 decoder.
from_utf8 reimplementation now returns as soon as error is found.

this also tries to fix a possible interference issue between
the benchmark and aggressive optimization passes.
applied optimizations to ASCII; refactored unsafe portions of UTF-8 impls.
moved generated tests for indices to testutils.
added benches to indices.
single-byte indices switched to the tries.

this greatly improves backward mapping performance, with improvements
ranging from 50% to 400%. this also allows for the exact accounting of
the binary size overhead.