allow to specify which protocol to use in utils
prepare for cython
use cython in binary protocol
move encode decode out of readstring
yah no need now
add exception to be raised in readI32.

when the client disconnect, server will still try a readMessageBegin,
which will issue a readI32 method call and cause TTransportException
with type END_OF_FILE raised.
We should handle that situation
more types in read write struct
put ttype inside
rewrite binary protocol with binary from scratch

only implemented write part for now.
only use dict in thrift_spec is prefered
use new binary protocol in benchmark.py
faster write with only one pack per write
Revert "faster write with only one pack per write"

This reverts commit 3c55b5de3882e0856ec3b93776bbe9e13dce2369.

I'm not very like of this idea now.
more compact cdef
wrap tests in function
low level c memcpy instead of struct pack
use malloc instead of cython array
add pass python buffer in for write action
add fast unpack
add memprint helper to show hex bytes in memory