Call timeout by timer

Allow specifying a timer reference (e.g., erlang:start_timer/3) as the timeout value for various synchronous gen_* fuctions, making it easy to enforce a singular time limit on a series of process calls. Does this by modifying gen:call to allow references as the timeout parameter and selectively receiving the message {timeout, TRef, _} (where TRef is the timeout argument).