WIP -- define interface via FFI

:construction: :warning: This is work in progress, but it's ready for discussion about whether we want to go ahead with it.

As written thus far, this patch removes the Ruby C extension, and replaces it with FFI on all ruby platforms. On MRI, we still piggyback on Ruby's C extension build tooling, but the library no longer includes the hooks into the MRI C APIs. On JRuby, we generate a Makefile similar to the one MRI generates, but it does not attempt to include ruby's headers or libraries in the paths given to the compiler.

Tests pass on all supported MRI versions and JRuby.

I have not done extensive benchmarking, but with the benchmark scenario I created for berkshelf's solve, I found no detectable difference in performance. As far as I can tell, the performance for the scenarios I've looked at is still limited by the performance of the ruby part of this code.