The Slime Grenade Update

When I first played scientist on vgstation, about a year ago, I was thrilled at all the possible use of slime extracts, and was very confused by the impossibility of placing slime cores in large chem grenades (which is apparently possible on some other servers according to some wiki I read ages ago I'm not even sure anymore).
Anyway, one year later here I am, coding that feature in the game myself. As my understanding of the game's code deepens, so does my ambition.

TL;DR: changelog (updated october 11th)
-you can now fit a slime extract in Large Chem Grenade casings
-you can now fit up to two slime extracts in Ex Grenade casings
-slime reactions that occur after a delay (gold/oil/orange/dark blue) will occur instantly if the reaction occurred in a chem grenade (as soon as the grenade is activated)
-added a few visible_messages for when various slimes extract reactions occur
-rewrote the "flash powder" reaction so it does a proper eyecheck() instead of just checking for sunglasses
-science goggles will now protect players from slime reaction-induced flashes (and only those)
-yellow slimes injected with water now produce a brand new type of lamp with two luminosity settings (2 or 6). The original reaction was supposed to make the extract emit light, but didn't work at all.
-replaced "The solution begins to bubble." with fitting lines if the reaction occurs inside a human body, or inside a grenade.


As for how the grenades themselves work (I had to do quite a few changes to what happens when a grenade is primed), I found it would be clearer for most people to just make a big picture:

![grenade3](https://cloud.githubusercontent.com/assets/7573912/4601459/fa2d7194-50ff-11e4-8f5f-dea1be8a82ca.png)

![slimelamp](https://cloud.githubusercontent.com/assets/7573912/4601438/55b4baba-50fe-11e4-9c67-9339b8817b17.gif)

never use colons as a bypass for periods

what a : does is tell the compiler to just assume that object has that variable

so let's assume we have a mob:
/mob/dildo
var/dix

it has the var dix, but does not have a nodix var.

So if I were to do this:

if(dildo.nodix) gib(world)
it would error out saying that nodix is undefined.

If I know nodix is defined and want the compiler to shut up, I can do

if(dildo:nodix) gib(world)

this makes it ignore the error during compile, but in this case it will just spout a runtime error out on me when it tries to check for nodix.

it's bad to use this as vars can change or be removed in the future and we can stop runtimes from happening if we don't use colons.