Use generics to handle Thrift structs better

Use reflection to handle Thrift types nested inside containers (list, map).
This fixes couple of known issues : 
* could not distinguish between a string and buffer inside a container
* could not find thrift class for a thrift exception in a container

unit tests for :
* 'binary' inside a container
* exception inside a container
* boolean type in a Union