codec: Robust Msgpack Spec RPC, Support for Go 1.2 Binary(M/Unm)arshaler, Major refactoring.

With Go 1.2 Binary(M/Unm)arshaler support, you can have a type implement the
respective (M/Unm)arshalBinary methods and we call those to encode or decode the type.

With Robust Msgpack Spec RPC support, you can now call RPC functions in a python/ruby/c server
over msgpack spec rpc, even when the functions take multiple arguments/parameters.

Adding support for Go 1.2 Binary(M/Unm)arshaler incurred an additional
cost to encoding and decoding. Some refactoring was done based on anectodal
testing to try to get back some of the performance loss:

  - Use pointer receivers more. Dereferencing much cheaper than copy (allocation)
  - Do not continually perform checks where the result can be done once and cached.
    Instead, do the checks once and cache the function to be called, and call it directly
    next time the value is seen.
  - Since a Decoder is not safe for concurrent access, using a cache at Encoder/Decoder
    level will allow us operate lock-free.
  - Simplify codebase to use one extHandle
    (instead of duplicate encHandle and decHandle which look similar)
  - look through use of wasNilIntf bool to ensure it's only used when necessary.
    Makes implementation of cached functions better
  - Do not use closures or receiver-curried functions .
    They have a clear and significant cost. Instead, use direct functions, collect the variables
    and pass them to the function directly.

All in all, there is a performance cost to these changes, but the code now provides the one feature
that JSON/Gob/etc provided previously i.e. ability to have a type define how it encodes or decodes
itself without having to register an extension at the En/Decoder level. You can still use an
extension function to override it.