Prefer more threads than deeper queue

ThreadPoolExecutor does not start spawning new threads until the
underlying queue's offer() method return false. This means that we would
completely fill the queue before kicking off more threads.

This patch introduces a ForwardingBlockingQueue, which always returns
false from offer(), thus forcing the threadpool to expand. The policy
then uses put() to schedule (or block on scheduling) the tasks.

Change-Id: I341f0ca7061f6b76ae1f3e049b12704f35140633
Signed-off-by: Robert Varga <robert.varga@pantheon.sk>
Use singleton list for simple packetIn

Tracing has shown we are spending quite some time constructing
CopyOnWriteArrayList -- just to throw it away. Let's use a singleton
list, which is way faster.

Change-Id: Id2bb5c7d548d5d4257170828667a66543099fa38
Signed-off-by: Robert Varga <robert.varga@pantheon.sk>
Merge changes Id2bb5c7d,I341f0ca7

* changes:
  Use singleton list for simple packetIn
  Prefer more threads than deeper queue