make thrift a proper OTP application
 * app-wide configuration (do DNS lookups?)
 * default protocols / transports (forget this factory business)
 * factor for elegance

tutorial client

make all methods effectful, remove the special casing (optionally, implement monads for Erlang)

change objects from {record_tag, ...} to {oop_object, {record_tag, ...}, other_useful_stuff}
so 1) we know exactly what's an object (can write is_object/1) e.g.
      is the tuple {tTransportException, ...} an object or a tuple that happens to start with that atom?
      we can't check this using is_record/2 without include every header file
      also, this makes it easy to pick objects out of deep tuples
   2) we can build more functionality into oop later if need be
      carry around the class/superclasses so is_a(Object, ClassOrSuperclass) is easy
   3) maybe hack up io:format and friends to run objects through oop:inspect automatically

Currently we can't distingish a method exiting in the middle with an undef or function_clause from a method not being defined in a module.  Big example: if the generated code can't be called at tErlProcessor.erl:63, it will exit with a missing_method not because tErlProcessor:process/3 is undefined, but because GP:process/3 is undefined, but the error makes it seem like the former happened.  The oop code needs to be smarter -- I think it's possible to either a) hook into Erlang's missing function handler or b) do some introspection to determine directly whether a function is defined, rather than trying to infer from the exit.

test suites

move as much (program logic) as possible out of thrift_logger

make thrift_logger 100% robust

thrift_logger detects term width?

undisgustify codegen

move away from thrift_oop_server shim to straight-up gen_servers

move away from Factories

move away from ?L0, ?M0, and friends ... make calls in oop or individual modules (like gen_servers should be)
