Additional fix for too many synchronization in Global TrafficShaping

Motivation:
When using GlobalTrafficShaping, every write (and read) are
synchronized, thus leading to a drop of performance (see #2956).
ChannelTrafficShaping is not touched by this issue since synchronzed is
then correct (handler is per channel, so the synchronized).

Modifications:
Remove all synchronized on GlobalTrafficShapingHandler on submitWrite,
and replace it with a lock per channel (since synchronization is still
needed to prevent unordered write per channel), as in the sendAllValid
method for the very same reason.

Remove all synchronized on TrafficCounter on Read/Write TimeToWait()
(unnecessary since already locked before).

Add synchronized on creation/remove operation on lock per channel
(PerChannel object) to prevent concurrency issue on this critical part,
but limited.

Result;
The Global TrafficShapingHandler should now have less "global"
synchronization, to the minimum, but still per Channel as needed.