Use spawn_monitor to reflect spawn failures

Contributor: Jay Nelson (jaynel)
Branch: 0_9_4

Changed the signature of cxy_ctl:execute_pid/4 to return
{pid(), reference()} from spawn_monitor rather than the
previous bare pid() value. The monitor reference is now
exposed to the calling application which may or may not
decide to use it for more robust reporting of spawn errors.

Internally erlang:error/2 is used to crash and report
failures to application code which may be separately
monitoring a spawned pid(). This was necessary to avoid
receiving a 'DOWN' message with Reason 'normal' when the
spawned process had in fact crashed. Formerly the new
process was spawned using proc_lib:spawn.

A new internal function fail_wrapper/2 distinguishes
between a spawn failure and an inline failure, using
erlang:exit/1 for the latter, rather than erlang:error/2
as with the former, so that the calling application
can use try / catch and have better reporting of a
failure when the spawn threshold is exceeded and a
new spawn is prevented.

There remains a potentially serious issue when the
max spawn threshold is exceeded. In this case the
code is executed inline, but there is no way to
interrupt it after the timeout has passed, so it is
possible that a heavily loaded system can end up
with some inline executions that never terminate.