--[[
{Madwork}

-[MadworkScriptSignal]---------------------------------------

	WARNING: .NewArrayScriptConnection() has undefined behaviour when listeners disconnect listeners within
		"listener_table" before all listeners inside "listener_table" have been fired.
		
	WARNING #2: Always assume undefined listener invocation order for [ScriptSignal] class; Current implementation invokes
		In the backwards order of connection time.

	Functions:
	
		MadworkScriptSignal.NewArrayScriptConnection(listener_table, listener, disconnect_listener, disconnect_param) --> [ScriptConnection]
			listener_table        [table]
			listener              [function]
			disconnect_listener   nil or [function] -- Yield-safe
			disconnect_param      nil or [value]
			
		MadworkScriptSignal.NewScriptSignal() --> [ScriptSignal]
		
	Methods [ScriptSignal]:
	
		ScriptSignal:Connect(listener, disconnect_listener, disconnect_param) --> [ScriptConnection] listener(...) -- (listener functions can't yield)
			listener              [function]
			disconnect_listener   nil or [function] -- Yield-safe
			disconnect_param      nil or [value]
			
		ScriptSignal:GetListenerCount() --> [number]
			
		ScriptSignal:Fire(...) -- Yield-safe
		
		ScriptSignal:FireUntil(continue_callback, ...) -- NOT YIELF-SAFE
		
	Methods [ScriptConnection]:
	
		ScriptConnection:Disconnect() -- Disconnect listener from signal
	
--]]