Rewrite furnace

* Move furnace related code into furnace.lua
* Move duplicated code into functions
* Rewrite ABM:
	* Easier to follow strcuture (no returns in the middle)
	* No unnecessary calls to get_craft_result
	* Split logic and "visual feedback" (a bit)
	* Fewer calls to meta:set and meta:get
	* Better feedback on the current state of the furnace

#192.
This can be shortened to:
```Lua
	return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src")
```