change mutex to error-checking

while debugging a double-lock in a single thread, I realized the mutex
better be strict.
fix leak in patternset destructor
fix deadlock within a subscriber thread.
modify cpu paths, so cores can be filter to different graph
Add MetricRouter

MetricRouter allows data to be passed to specific instances of
GraphView.  The rpc pub/sub relationship is 1:1, and MetricRouter takes
the role of subscriber.  Separate GraphView instances register as
subscribers to GraphView, for specific metrics, which are identified
by wildcarded paths.