misc: add callback hooks and refactor pmc

Callbacks for monitoring and performance measurement:
- Add new callback list type, with context
- Add callbacks for API, CLI, and barrier sync
- Modify node dispatch callback to pass plugin-specific context
- Modify perfmon plugin to keep PMC samples local to the plugin
- Include process nodes in dispatch callback
- Pass dispatch function return value to callback

Type: refactor

Signed-off-by: Tom Seidenberg <tseidenb@cisco.com>
Change-Id: I28b06c58490611e08d76ff5b01b2347ba2109b22
diff --git a/src/vlib/cli.h b/src/vlib/cli.h
index df9ed72..0a8ef9d 100644
--- a/src/vlib/cli.h
+++ b/src/vlib/cli.h
@@ -132,7 +132,7 @@
 
 typedef void (vlib_cli_output_function_t) (uword arg,
 					   u8 * buffer, uword buffer_bytes);
-typedef struct
+typedef struct vlib_cli_main_t
 {
   /* Vector of all known commands. */
   vlib_cli_command_t *commands;
@@ -146,6 +146,12 @@
   /* index vector, to sort commands, etc. */
   u32 *sort_vector;
 
+
+  /* performance counter callback */
+  void (**perf_counter_cbs)
+    (struct vlib_cli_main_t *, u32 id, int before_or_after);
+  void (**perf_counter_cbs_tmp)
+    (struct vlib_cli_main_t *, u32 id, int before_or_after);
 } vlib_cli_main_t;
 
 #ifndef CLIB_MARCH_VARIANT