Optimization for short timeouts and refactor
Fix: did only use CancellationToken with timeout

Wait(int, CancellationToken) didn't properly use CancellationToken when
timeout = -1
Improved SpinWait

- New overloads for SpinWaitRelativeSet that don't have the unless
parameter
- SpinWaitRelativeSetUnlessNegative and
SpinWaitRelativeExchangeUnlessNegative will never set a negative - if
the current value is negative the thread will keep waiting
Added SpinWaitRelativeSetUnlessExcess

SpinWaitRelativeSetUnlessExcess is a counterpart for
SpinWaitRelativeSetUnlessNegative that allows to do a relative set
unless it goes beyond a max value.
Improved SpinWait (even more)

- SpinWaitRelativeSet renamed SpinWaitRelativeSetUnless
- SpinWaitRelativeExchange renamed SpinWaitRelativeExchangeUnless
- Added new SpinWaitRelativeExchange without unless parameter
- SpinWaitRelativeSetUnlessNegative and
SpinWaitRelativeExchangeUnlessNegative will return false when check is
negative (instead of keep waiting)
- SpinWaitRelativeSetUnlessExcess and
SpinWaitRelativeExchangeUnlessExcess will return false when check
greater than maxValue (instead of keep waiting)
- SpinWaitRelativeExchangeUnlessNegative and
SpinWaitRelativeExchangeUnlessExcess will out the last readed value
instead of the resulting value.
Fix: removed unsed maxValue from *UnlessNegative

removed unused parameter maxValue from SpinWaitRelativeSetUnlessNegative
and SpinWaitRelativeExchangeUnlessNegative
New methods

SpinWaitRelativeSetBounded and SpinWaitRelativeExchangeBounded - allows
to do a relative set in a given range, note: the range is invlusive.
Improved *Bounded method

These methods will fail instead of wait when there is no room within the
range.
Refactor: Improved templates
template fix
Another template refactor
Fused templates - *Unless put on pair

The methods *Unless now share template with the others methods *Unless*
methods
Fixed CountdownEvent implementation

CountdownEvent behaviour fixed taking advantage of recent changes in
ThreadingHelper
Added initial implementation of SemaphoreSlim
ThreadingHelper overloads with CancellationToken

New overloads with CancellationToken for all SpinWait methods, and HUGE
refactor.
Batch build fix
Fixed typos

...
The implementation of CancellationToken has me thinking, as I wish to
compile the same code for all the targets I need an strategy that
doesn't depend on intenral methods on CancellationToken
Hack the CancellationToken!!!

_source == null means that the CancellationToken cannot be cancelled
(that is what the property CanBeCancelled checks... so it also means
IsCancellationRequested = false and Register = useless.

Futhermore, WaitHandle checks if the source is disposed, so I'll use it
as a workaround to check if the source is disposed without being able to
reach the source. CnacellationTokenHelper just does that.
Added MonitorHelper

MonitorHelper is intender to add the functionality of the overloads
added to Monitor in .NET 4.0 and more (CancellationTokens)
Update and rename SemaphoreSlime.cs to SemaphoreSlim.net35.cs

Given the correct name to the file