Fixes #22 Unit test failure - TestUpdatesConcurrent
Fixes #22 Unit test failure - TestUpdatesConcurrent

Problem: Analysis, there is a locking inversion. ProcessNodeUpdate locks
mutex then locks virtualServers. processService locks virtualServers
then calls getNodesFromCache which lock mutex.

The stack trace from issue #22 shows this as well.

Solution: This is a stop gap fix.

I first attempted to fix issue 6 with this commit as well. But unit
testing turns out to be too difficult with the singleton pattern used in
this package.

The node processing should be a goroutine and poll loop in the
background. The singleton pattern creates complicated state problems for
the unit tests as written though.

This fix targets the exact behavior and problem without a more
complete refactor due to time constraints. Simple change the locking
inversion introduced when virtualServers became synchronized. To make
things easier an additional outputConfigsLocked function was added when
called with the virtualServers lock held.

F5Networks/k8s-bigip-ctlr,sjberman/k8s-bigip-ctlr,sjberman/k8s-bigip-ctlr,sjberman/k8s-bigip-ctlr,sjberman/k8s-bigip-ctlr,michaeldayreads/k8s-bigip-ctlr,F5Networks/k8s-bigip-ctlr,michaeldayreads/k8s-bigip-ctlr,michaeldayreads/k8s-bigip-ctlr,michaeldayreads/k8s-bigip-ctlr,michaeldayreads/k8s-bigip-ctlr,sjberman/k8s-bigip-ctlr,F5Networks/k8s-bigip-ctlr,F5Networks/k8s-bigip-ctlr