Implement Semian API

@Sirupsen, @fw42

This implements the API we discussed the other day: https://gist.github.com/Sirupsen/2c3e0fd18b1ee95de877

The hardest part was writing the tests, but I think I've covered all the case we care about. The tests are the part I care most about with regards to reviewing - the implementation was pretty straightforward.

From the MRI Changelog:
```
Tue Oct 29 20:01:58 2013  Koichi Sasada  <ko1@atdot.net>

	* add RUBY_TYPED_FREE_IMMEDIATELY to data types which only use
	  safe functions during garbage collection such as xfree().

	  On default, T_DATA objects are freed at same points as finalizers.
	  This approach protects issues such as reported by [ruby-dev:35578].
	  However, freeing T_DATA objects immediately helps heap usage.

	  Most of T_DATA (in other words, most of dfree functions) are safe.
	  However, we turned off RUBY_TYPED_FREE_IMMEDIATELY by default
	  for safety.
```