codec: Refactored for better APIs and improved performance (> 20% improvement).

1. Allow setting: AsSymbols to specify how/when to encode symbols.

Symbols incur a performance cost due to string comparison whenever a struct or map[string]XXX
is being encoded. Users can now configure when to encode as symbols, understanding the tradeoff
of encoding speed vs encoding size.

1. Remove msgpack time extensions.

There has not been agreement yet on the format of the msgpack time extension.
We removed this so folks do not have the wrong impression.
In Go 1.2, we support binaryMarshaler and time.Time's binaryMarshal methods are
used by default.

1. Support fast path for common slices and maps.

Reflection has overhead, and incurs extra allocation costs.

We mitigate this for some common slices and maps by bypassing reflection and
trying to encode/decode directly.

1. Support MapBySlice to allow encoding/decoding a map into a slice.

For some use-cases, a map should encode as a stream array,
as a sequence of key-value pairs.
Vice versa, a map can be decoded from a slice.

1. Many other optimizations:

- Better use of pointers and care during dereferencing vs copying values.
- ...

1. Re-organized code

- Code flows as you read it. Much better.
- Moved decode wasNilIntf handling to kInterface
- go fmt
- ...