Rewrote furnace recipe parser

* Fixes #110
Why would you ever use a `char[]` instead of `* char`? Also, why would you use a C string instead of an `std::string`?