Pandora's box of leaked chunks was opened! Poweruser to the rescue!
Commit faa3058 removed the checks of the unloadqueue for entities and tileentities. This made it possible for Tile-/entities to keep chunks loaded by removing them from the unloadqueue via getChunkAt, when they are ticked. The chunk garbage collector does not fix this, as the chunks are removed from the unloadqueue before the unloading happens, which is done at the start of the next tick in WorldServer:doTick()

Villages are not ticked anymore when no chunks of them are loaded (4 corners and the center are checked), as the verification of the village doors has kept the chunks loaded as well. Actually it was even worse:
1) checking village doors loaded the chunks
2) chunk garbage collector added them to the unloadqueue
3) chunks were unloaded at the start of the next tick
4) go back to 1)

2 fixes for hoppers: Sucking in items and getting the inventory of a block, check the unloadQueue again

1 fix for furnaces: added unloadQueue check when it is checked, if a furnace can burn. A furnace with an empty bucket as fuel in it, was a super-small-low-cost chunk loader for example