Rewrote furnace recipe parser

* Fixes #110
You probably shouldn't close the stream when it's bad. And you definitely don't need to, it gets closed automatically when the variable goes out of scope.