Add bindings for ThriftCatalog and ThriftCodecFactory

This is mainly to allow binding of custom codecs that need a ThriftCatalog injected. Was trying to get this catalog via injecting a ThriftCodecManager and using codecManager.getCatalog(), but this doesn't work if you want your bound custom codec to be in the internal codec set used to create the ThriftCodecManager (because it creates a dependency loop).

Ported from master branch revision cec5f1ad8a934f7c5a7dad9c1338201d70489cbd