Rewrote furnace recipe parser

* Fixes #110
We have a `TrimString()` function, is much more readable than this.