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.
The begin and end arguments of the loop over layers depend on what type of integral you've got. The vertical is controlled only by the number of layers which is built into the iteration set. So unless you do something about it, the loop over layers will always be over all layers.