This is pretty simple. Don't implement IInventory on your TileEntity. Instead store an instance of IItemHandler in your TileEntity. You can initialize it using ItemStackHandler.
The next step is to override getCapability and hasCapability. In your case hasCapability can just compare the Capability parameter against CapabilityItemHandler.ITEM_HANDLER_CAPABILITY(just using ==). And in a case where it isn't that one return the super. Then in getCapability do the same thing except you need to return your IItemHandler instance. I believe what you had to do here was use Capability#cast(value).
The worst thing I've seen a tutorial do wrong for something like this was have the Block class implement ITileEntityProvider. I haven't seen anything wrong with the way they set up the Gui and Container.
This part is just the logic behind what you want to do. Simply figure out the conditions for when you want it to consume fuel. And when those conditions are true consume fuel. The same can be said for the processing part. Figure out when you want the furnace to process, then once it is done consume the ingredients and give the output.