add sync_reply, change msg format to be more like gen_server

diff --git a/src/rexi.erl b/src/rexi.erl
index fced6ab..aca029b 100644
--- a/src/rexi.erl
+++ b/src/rexi.erl
@@ -61,6 +61,24 @@
     {Caller, Ref} = get(rexi_from),
     erlang:send(Caller, {Ref,Reply}).
 
+%% @equiv sync_reply(Reply, infinity)
+sync_reply(Reply) ->
+    sync_reply(Reply, infinity).
+
+%% @doc convenience function to reply to caller and wait for response.  Message
+%% is of the form {OriginalRef, {self(),reference()}, Reply}, which enables the
+%% original caller to respond back.
+-spec sync_reply(any(), pos_integer() | infinity) -> any().
+sync_reply(Reply, Timeout) ->
+    {Caller, Ref} = get(rexi_from),
+    Tag = make_ref(),
+    erlang:send(Caller, {Ref, {self(),Tag}, Reply}),
+    receive {Tag, Response} ->
+        Response
+    after Timeout ->
+        timeout
+    end.
+
 %% internal functions %%
 
 % send a message as quickly as possible