- Add GradualEnergyOutput (used for energy production assemblies)
- Change ItemStorageOutput#matches to check if the slot is empty before returning false
- Changed usage of `Pair<T, Int>` to `TStack`
- Changed GradualAssemblies to use Gradual(Input | Output)Slots instead of hardcoded values used in `consume()`
- Changed *Inventory interfaces to use Storages instead of methods like `getFluid(slot: Int): FluidVariant`
- Refactored package structure to avoid duplicate package names (i.e. `type/fluid` & `type/item` instead of `fluid/type` & `item/type`
- Changed `Fluid(Input | Output)Slot` to use `MultiFluidStorage` (interface containing `fluidStorage: CombinedStorage<FluidVariant, SingleSlotStorage<FluidVariant>>`
- Added `SingleFluid(Input | Output)Slot`, in the edge case that a block entity only has one storage