One big update for stacks.

#3861, attempt two.

Engineer cyborgs now have three storages: metal, glass and wire. Their modules use these storages in construction. It means that rods, floor tiles and metal all use same stock, and run out at the same time. For example, you can remove floor tiles, put down reinforced floor, then pick tiles back up to regain some metal. They also get regular glass.

It also adds a lot of feedback messages: instead of generic "you need X of Y do to this!" on every item you get something like "you need X of Y to build a flamethrower".

Adds span classes in all these messages, too.

Fixes a lot of instances where it was possible to start placing glass in computer twice and waste some as result and such. Fixes #3780 (there are many bugs like this).

Fixes a floorbot bug: it accepted any amount of tiles, always used whole stack and always had 10 at the end. Now you need exactly 10.

Fixes a lot of :'s.

Makes stack-related stuff more OOP. Nothing ever (that I touched) accesses its amount directly: all interactions are now made with get_amount() and use()

Also fixes circuit imprinter glass duplication bug.