Library
-------
The library abstract classes, exceptions, and general use functions
are mostly jammed in Thrift.ml (an exception being
TServer). 

Generally, classes are used, however they are often put in their own
module along with other relevant types and functions. The classes
often called t, exceptions are called E.

Implementations live in their own files. There is TBinaryProtocol,
TSocket, TThreadedServer, TSimpleServer, and TServerSocket.

A note on making the library: Running make should create native, debug
code libraries, and a toplevel.


Struct format
-------------
Structs are turned into classes. The fields are all option types and
are initially None. Write is a method, but reading is done by a
separate function (since there is no such thing as a static
class). The class type is t and is in a module with the name of the
struct.


enum format 
-----------
Enums are put in their own module along with
functions to_i and of_i which convert the ocaml types into ints. For
example:

enum Numberz
{
  ONE = 1,
  TWO,
  THREE,
  FIVE = 5,
  SIX,
  EIGHT = 8
}

==>

module Numberz =
struct
type t =
| ONE
| TWO
| THREE
| FIVE
| SIX
| EIGHT

let of_i = ...
let to_i = ...
end

typedef format
--------------
Typedef turns into the type declaration:
typedef i64 UserId

==>

type userid Int64.t

exception format
----------------
The same as structs except that the module also has an exception type
E of t that is raised/caught.

For example, with an exception Xception,
raise (Xception.E (new Xception.t))
and
try
  ...
with Xception.E e -> ...

list format
-----------
Lists are turned into OCaml native lists.

Map/Set formats
---------------
These are both turned into Hashtbl.t's. Set values are bool.

Services
--------
The client is a class "client" parametrized on input and output
protocols. The processor is a class parametrized on a handler. A
handler is a class inheriting the iface abstract class. Unlike other
implementations, client does not implement iface since iface functions
must take option arguments so as to deal with the case where a client
does not send all the arguments.
