High Performance Profiling for RHS and LHS assembly

This branch is meant to complement the python profiling that is currently in master. It handles individual parallel loops, in particular the ones responsible for the RHS and LHS assembly.

Important flags to set:
```
PYOP2_LAZY=0
PYOP2_HPC_PROFILING=1
```
Curently only the sequential and openmp backends are supported.

Likwid profiling is also introduced, at both kernel and wrapper level.

Support for Valuable Bandwidth measurements.

The branch passes PyOP2 tests locally.
Still to do: 
  - add PyOP2 tests for profiling.
  - add instructions on how to use the framework.

**Note:**
I opened this pull request in order to spark constructive feedback on how to best incorporate this functionality into PyOP2.
Not true: master sorts by name of the timer, you sort only by the last 6 characters, which afaict is the kernel hash but *only* if the timer is a kernel. There are a lot of additional timers for which this ordering doesn't make any sense.