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.
