/**
 * call-seq:
 *     rxp.sub(str, replacement)
 *     rxp.sub(str) {|match_data| ... }
 *
 * Returns a copy of _str_ with the _first_ occurrence of _rxp_ pattern
 * replaced with either _replacement_ or the value of the block. 
 *
 * If a string is used as the replacement, the sequences \1, \2, 
 * and so on may be used to interpolate successive groups in the match.
 *
 * In the block form, the current MatchData object is passed in as a
 * parameter. The value returned by the block will be substituted for
 * the match on each call.
 *     
 **/
static VALUE oregexp_m_sub(int argc, VALUE *argv, VALUE self) {