Remove use of 'register' keyword

The 'register' keyword is not used by modern compilers and it is
depracted in C++11.  When compiling with clang++ and the -std=c++11
flag the depracated keyword triggers a warning which causes compilation
to fail since warnings are treated as errors.
Merge pull request #3092 from southerngs/remove_register_keyword

Remove use of 'register' keyword
Updated HAMT to current specs.
Make Tuple subclassable.
Updated HAMT specs.
Make rb_funcall3 disallow private methods
Add specs for rb_funcall3
Failing scrub spec when using block encodings.
Implement the String#scrub! bang method

This method is similar to String#scrub but alters the current string.
Added specs for String#scrub!
Merge pull request #3099 from robin850/string-scrub-bang

Implement the String#scrub! bang method
Make String#scrub! work with a block
Added specs for String#scrub! with a block
Merge pull request #3100 from robin850/string-scrub-bang-block

Fix String#scrub! to work with a block
Add the Kernel#singleton_class? predicate method

This method is a convenient way to know whether a given object is a
singleton class or not. This feature has been added in Ruby 2.1 (see
https://bugs.ruby-lang.org/issues/7609 for further information).
Added specs for Kernel#singleton_class?
Merge pull request #3102 from robin850/singleton-class-p

Add the Kernel#singleton_class? predicate method
Enumerable#sort works even if #to_a returns a frozen Array

Ruby's documentation on Enumerable#to_a does not suggest that the returned
Array must be mutable (only that it must contain the items in the Enumerable).
In fact, Array#to_a itself can return a frozen Array. Therefore, it is better
to account for Enumerables which return a frozen Array from #to_a.
Add spec ensuring Enumerable#sort works even if #to_a returns a frozen Array
Use FileUtils.rm_r to cleanup rbx-configure-test files

xcode on Mac OSX creates a rbx-configure-test.dSYM directory that
File.delete can't remove