[WIP] [DO NOT MERGE] Saycode rewrite

HIGHLIGHTS:
* All atom/movables can talk and hear!
* Hear() proc added to remove shitty typechecking!
* mob/living/say() is no longer a monolith!
* Removal of duplicates, copypasta and typechecks!
* HEAR flag to determine wether things can hear!
* Languages are bitflags instead of typechecks!
* Faster recursive checks!
* ALL and NONE #defines for bitflag convenience!
* Almost all saycode bugs fixed!
* Removal of the unused silicon/decoy type!

Fixed #699 
Fixed #686 
Fixed #333 
Fixed #3347 
Fixed #263 
Fixed #1420
Fixed #149

Fixed #950 (Considering that this is a complete rewrite, it's probably safe to close this issue, and if it were to happen again it could be re-opened)
It was there for reference, I just forgot to remove it.
Op 17-aug.-2014 23:43 schreef "Orange Borg" <notifications@github.com>:

> In code/game/machinery/telecomms/broadcaster.dm:
>
> >
> > -  /* ###### Organize the receivers into categories for displaying the message ###### */
> > +	for (var/mob/R in receive) //Filter receiver list.
> > +		if (R.client && !(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
> > +			receive -= R
> > +
> > +		if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes.
> > +			receive -= R
> > +
> > +	for(var/atom/movable/hearer in receive)
> > +		hearer.Hear(message, virt, AM.languages, message, freq)
> > +
> > +/*	// ###### Organize the receivers into categories for displaying the message ######
>
> Any reason not to simply remove the code? Radio code is cluttered as is,
> so I wouldn't want it to have lots of deadcode hanging around.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/tgstation/-tg-station/pull/4337/files#r16332319>.
>