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.

(cherry picked from commit 44d0a767828e9b523d3710db91cdda4e647d73f6)
Signed-off-by: Robert Varga <robert.varga@pantheon.sk>
Signed-off-by: Michal Rehak <mirehak@cisco.com>
Change-Id: I75c6bca68d691a788b0b1e2af1899d6736230538
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.

(cherry picked from commit 1e3a1c60754f682f68a8c5e799b605a2d0b0cbca)
Signed-off-by: Robert Varga <robert.varga@pantheon.sk>
Signed-off-by: Michal Rehak <mirehak@cisco.com>
Change-Id: I0da88a82bba7ff4512bb11b2b742f8477d64c3b4