That should be working....but change
//This
if (!mergeItemStack(sourceStack, first_fuel_index, first_fuel_index + fuel_slots, true))
// To this
if (!mergeItemStack(sourceStack, first_fuel_index, first_fuel_index + fuel_slots, false))
addSlotToContainer is being called in your main class.
When you call it the number of slots is still = 0 for all of those, and since you stored the number of slots in your TileEntity I don't understand why you don't use those? Instead of creating new variables in your container.
*Note make them not final.
In get output you never check if input2 is input. And honestly forge why would you just check to see if the item is the same when you should be comparing ItemStacks.....
Sadly it is not so http://stackoverflow.com/questions/1168345/why-does-this-and-super-have-to-be-the-first-statement-in-a-constructor
What I mean is if you have something like upgrade slots that will be in all of the containers, you can add them in the main container. And all new ones for that specific TileEntity you add in that TileEntities container.
Well then I'm going to say what I think happened since you are using for loops and setting variables that are initially set to 0. The constructor for the previous class gets called before the variables could get set in your ContainerFluxGrinder.
Solution add slots in your new Containers atleast the ones that are not required.