[thrift] gut Erlang exception handling

Summary: * move type field to tException from subclasses
          * add backtrace to tException
          * add oop:is_a
          * on exit, wrap exceptions in {thrift_exception, E} ... otherwise can't distinguish e.g. exit:{{tBinProtException, {tException, ...}}, Stack} vs. exit:{tBinProtException, {tException, ...} -- I hate erlang
          * all throws/exits to tException:throw which does the wrapping described above

Reviewed By: eletuchy

Test Plan: been using this code on my live server ^_^

Revert: OK


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665350 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/erl/src/transport/tSocket.erl b/lib/erl/src/transport/tSocket.erl
index f002fd8..5aead1e 100644
--- a/lib/erl/src/transport/tSocket.erl
+++ b/lib/erl/src/transport/tSocket.erl
@@ -75,10 +75,8 @@
 
     case gen_tcp:connect(Host, Port, Options) of
         {error, _} ->
-            exit(tTransportException:new(
-                   ?tTransportException_NOT_OPEN,
-                   "Could not connect to " ++ Host ++ ":" ++ Port)
-                );
+            tException:throw(tTransportException,
+                             [?tTransportException_NOT_OPEN, "Could not connect to " ++ Host ++ ":" ++ Port]);
         {ok, Socket} ->
             effectful_setHandle(This, Socket)
     end.
@@ -97,7 +95,7 @@
 
     case Val of
         {error, _} ->
-            throw(tTransportException:new(?tTransportException_NOT_OPEN, "in write"));
+            tException:throw(tTransportException, [?tTransportException_NOT_OPEN, "in write"]);
         ok ->
             {ok, This}
     end.
@@ -108,13 +106,13 @@
         {ok, []} ->
             Host = oop:get(This, host),
             Port = oop:get(This, port),
-            throw(tTransportException:new(?tTransportException_UNKNOWN, "TSocket: Could not read " ++ Sz ++ "bytes from " ++ Host ++ ":" ++ Port));
+            tException:throw(tTransportException, [?tTransportException_UNKNOWN, "TSocket: Could not read " ++ Sz ++ "bytes from " ++ Host ++ ":" ++ Port]);
         {ok, Data} ->
             %% DEBUG
             ?INFO("tSocket: read ~p", [Data]),
             Data;
         {error, Error} ->
-            exit(tTransportException:new(?tTransportException_NOT_OPEN, "in tSocket:read/2: gen_tcp:recv"))
+            tException:throw(tTransportException, [?tTransportException_NOT_OPEN, "in tSocket:read/2: gen_tcp:recv"])
     end.
 
 effectful_close(This) ->