further DSL tweak.
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.

nox/rust-encoding,lifthrasiir/rust-encoding,tempbottle/rust-encoding,nox/rust-encoding,jedisct1/rust-encoding,tempbottle/rust-encoding,servo/rust-encoding,jedisct1/rust-encoding,tempbottle/rust-encoding,lifthrasiir/rust-encoding,servo/rust-encoding,nox/rust-encoding,lifthrasiir/rust-encoding