Extract wrapped exception class creation

The wrapped exception classes are not created until ThriftClient.new
is called with the correct client class. This makes it difficult to
write code like `rescue MyThrift::Client::TransportException` because
the exception class may not exist yet.

Callers may now use ThriftClient.create_wrapped_exception_classes to
ensure the desired classes have been created.