This commit changes how NanoUI's live data updating system works.
Previously, data for the template was directly gathered in the
ui_interact proc. Now, it is seperated into the proc `ui_data`.
To players, this does absolutely nothing.
To coders, this opens up the potential for a much more complicated and
fancy graphical updating system in the future, because the data is
available on-demand without ever having to call
nanomanager.try_update_ui.
Allows for buckets to be worn as a hat. Déjà vu.

Sprite by FullOfSkittles
🆑 IcyV
add: Buckets can be worn as hats.
/🆑
Previously, the brown rbottles found in chemical lockers were stuck as
brown forever. Now they actually display the chemical inside of them.
The bottles for items such as morphine or toxins that you could get from
vendors always had a specific bottle that never updated based on
chemical or volume. These have new bottles and properly work now.

Much thanks to FullOfSkittles for the bottle sprite and KasproVv for
pretty much most of getting this worked out.
🆑 IcyV
add: Adds new bottle sprite
fix: Fixes many bottles being locked to a single icon
/🆑
Refactored most instances of special_role setting/checking to use new
SPECIAL_ROLE_X defines in code/__DEFINES/gamemode.dm
Removed relative pathing from objective.dm and split large if statements
into multiple, plus a bunch of styling fixes
Refactored every instance of `istype(ticker.mode` into a GAMEMODE_IS_X
define in code/__DEFINES/gamemode.dm. Done primarily for when someone gets
around to making gamemode code less AWFUL