making a generic version of the AI's visibility code so that it can be reused by the Cult Spirits
* fixing the visibility update loop through the dictionary
* moving the standard turf and object update triggers to the visibility_network update_triggers.dm file
Merge branch 'master' of https://github.com/Baystation12/Baystation12 into dev
- major update to all systems
- creating the mask entity
- modifying the code for cult icons
- updating the camera net
- adding visibility network updates to all mobs
- unifying the culting and deculting process
- adding "Make Mask" function to Player Panel
- removing unnecessary planning document
Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into dev
Admin request:  Jobbans for IA and ERT
Merge pull request #3938 from Ccomp5950/master

Admin request:  Jobbans for IA and ERT
Scalpels also mangle gloves for nonhuman wear.
Merge pull request #3944 from zekesulastin/scalpel-gloves

Scalpels also mangle gloves for nonhuman wear.
Ravensdale request:

Detomax cartridge use will not create an admin message saying the name/key of the antag that tried to blow up the target, and if it was successful or not.
Merge pull request #3946 from Ccomp5950/master

Ravensdale request
Bugfix: Yeah variables are case sensitive.

Lesson learned:  Always compile before commit, unless attempting to pad your commit count.
Merge pull request #3947 from Ccomp5950/master

Bugfix: Yeah variables are case sensitive.
Spelling mistake.

Commit_Count++
Merge pull request #3948 from Ccomp5950/master

Spelling mistake.
Removed earrape
Walking on tile makes it dirty. Takes 40 times for mob to enter tile for dirt overlay to appear.
Mopping resets dirtiness level.
Bygex - Regex implementation for byond.
Source-code for the dll can be found here under LGPL license:
https://github.com/Carn/bygex
It is merely an interface to boost::regex. It uses perl syntax (non-recursive).

Guidelines for use:
var/datum/regex/Rgx = regex_findall(haystack, regex_expression)
for(var/i=1, i<=Rgx.matches.len, ++i)
    world << Rgx.str(i)

The implementation is different to the one other regex-in-byond library I found. This implementation only returns a string containing the position and length of each match and submatch. This uses far less memory than also passing back the matched strings (especially in large files like dream-maker maps).

Note: Regex indexes begin at 1 (since byond lists begin at 1), unlike traditional regex. If we are using a procedure such as regex_findall(), with 3 sub-expressions, match 1 will be the overall match. Match 2 will be subexpression 1, match 3 will be subexpression 2.... Match 5 will be the overall match of the next match...and so on. To ease use, there is /datum/regex/var/anchors which is a numerical value which can be used inside loops like so:

for(var/i=1, i<=Rgx.matches.len, i+=Rgx.anchors)
    world << Rgx.str(i+1)
This will print the first submatch of each match to world.
Cloning scanner saves languages in records.