Mark self as on stack in transcoding handling
Move type checking up in transcoder logic

This ensures we don't create invalid C structures because parts have
been allocated while others have not. This would cause segfaults if
someone manages to get the encoding setup in an invalid state.
Add specs for rb_intern_str to C-API
Implement rb_intern_str in C-API
Remove unneccesary FFI definition
Add rb_int_positive_pow needed for latest Ruby parser
Make sure to mark self on stack since it's used for comparison
Revert back to using std::list

We current keep iterators in instance variables which are invalidated
for a deque, but not for a list. This brings back some of the
performance issues in specific cases with using std::list so we should
review this code to see if it can be done differently to perform
better.