Fix receive support in erl_eval with a BEAM module

Using the low-level BEAM instructions, we can loop over each message in
the process queue and removes the first message that matches, without
receiving them all to later send them back to itself.

The function erl_eval_receive:match_clause/5 is equivalent to the
following pseudo-code:

  match_clause(T, Cs, Bs, Lf, Ef) ->
    RESET MESSAGE QUEUE POINTER,
    LOOP:
      case PEEK CURRENT MESSAGE WITH TIMEOUT T of
        {ok,Msg} ->
          case erl_eval:match_clause(Cs, [Msg], Bs, Lf, Ef) of
            nomatch ->
              DECREMENT TIMEOUT T,
              ADVANCE MESSAGE QUEUE POINTER,
              GOTO LOOP;
            Result ->
              RESET MESSAGE QUEUE POINTER,
              Result
          end;
        timeout ->
          RESET MESSAGE QUEUE POINTER,
          timeout
      end.