fix a build error in clang 3.2
improve a performance slightly in str_each_uchar32_starting_from() when string is only ascii code range

* before
Rehearsal ------------------------------------------
[]=      4.250000   0.000000   4.250000 (  4.255847)
index    3.800000   0.010000   3.810000 (  3.797601)
--------------------------------- total: 8.060000sec

             user     system      total        real
[]=      4.260000   0.010000   4.270000 (  4.253540)
index    3.800000   0.010000   3.810000 (  3.798211)

* after
Rehearsal ------------------------------------------
[]=      3.670000   0.010000   3.680000 (  3.669379)
index    3.190000   0.000000   3.190000 (  3.195554)
--------------------------------- total: 6.870000sec

             user     system      total        real
[]=      3.680000   0.010000   3.690000 (  3.679104)
index    3.200000   0.010000   3.210000 (  3.199752)

Test Code:
----
require 'benchmark'

str = "hoge" * 10000 + "\n"

Benchmark.bmbm(7) do |x|
  x.report "[]=" do
    10000.times do
      str2 = str.dup
      str2["hoge\n"] = "foo"
    end
  end

  x.report "index" do
    10000.times do
      str.index("\n")
    end
  end

end
refactor
improve a performance in String#index(pattern) when passed one character as pattern

* before
             user     system      total        real
index    3.190000   0.000000   3.190000 (  3.195554)

* after
             user     system      total        real
index    0.300000   0.000000   0.300000 (  0.296230)

Test Code:
----
require 'benchmark'

str = "hoge" * 10000 + "\n"

Benchmark.bm(7) do |x|
  x.report "index" do
    10000.times do
      str.index("\n")
    end
  end
end
improve a performance in String#index when string is ascii code range

* before
             user     system      total        real
one      0.320000   0.000000   0.320000 (  0.312905)
small    4.330000   0.000000   4.330000 (  4.336463)

* after
             user     system      total        real
one      0.340000   0.000000   0.340000 (  0.331335)
small    1.330000   0.000000   1.330000 (  1.328736)

Test Code:
----
require 'benchmark'

str = "hoge" * 10000 + "\n"

Benchmark.bm(7) do |x|
  x.report "one" do
    10000.times do
      str.index("\n")
    end
  end

  x.report "small" do
    10000.times do
      str.index("hoge\n")
    end
  end
end
improve a performance in String#delete

* before
             user     system      total        real
delete   0.960000   0.010000   0.970000 (  0.968533)

* after
             user     system      total        real
delete   0.200000   0.000000   0.200000 (  0.185961)

Test Code:
----
require 'benchmark'

str = "hoge abc" * 100

Benchmark.bm(7) do |x|
  x.report "delete" do
    10000.times do
      str.delete("abc")
    end
  end
end
improve a performance in String#+

it reserves a heap area to store a concatenated string because it is slow to resize a heap.

* before
      user     system      total        real
  0.390000   0.230000   0.620000 (  0.608497)

* after
      user     system      total        real
  0.330000   0.050000   0.380000 (  0.380267)

Test Code:
----
require 'benchmark'

str = "abc" * 100
str1 = str * 100
str2 = str * 200

Benchmark.bm do |x|
  x.report do
    10000.times do
      str1 + str2
    end
  end
end
improve a performance in String#== and String#eql?

When the length of the string does not match, it will not need to invoke a memcmp().

* before
          user     system      total        real
==    0.230000   0.000000   0.230000 (  0.233827)
eql?  0.230000   0.000000   0.230000 (  0.227859)

* after
            user     system      total        real
==     0.020000   0.000000   0.020000 (  0.014583)
eql?   0.010000   0.000000   0.010000 (  0.015350)

Test Code:
----
require 'benchmark'

str = "abc" * 100
str1 = str * 100
str2 = str * 200

Benchmark.bm(4) do |x|
  x.report "==" do
    100000.times do
      str1 == str2
    end
  end

  x.report "eql?" do
    100000.times do
      str1.eql? str2
    end
  end
end
fix a bug in MatchData where it causes a crash due to an assertion when calls a method with uninitialized MatchData object

EX)
----
MatchData.allocate.regexp
[fix #174] use rb_vm_call instead of rb_funcall to avoid an issue #174 and improve a performance slightly
Remove unused static selector from complex.c

If it is needed, we can use selCmp from id.h instead.
[fix #179] use standard memory allocation functions in gdbm
fix a memory leak in ext/gdbm
delete trailing white spaces in ext/gdbm
fix type in ext/gdbm
make GDBM#index warn like Hash
update rdoc in ext/gdbm
change the method declaration in ext/gdbm in order to use RETURN_ENUMERATOR() macro
enable ext/gdbm
implement rb_hash_delete_if()