codec: Support decoding into a struct from an encoded array.

We now keep track of the current encoded type, and when decoding into a struct,
we decode by field name if a map, and by field position if an array.

Also, decodeNaked has been simplified so that the decodeHandle is not passed in
as a parameter. Instead, each *driver keeps a reference to the *Handle that created it.

Fixes #13 .