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.
At the time there was no clear way of deternining which loop was a RHS. I'm not aware of anything at the moment that will tell me precisely which loop is a RHS assembly operation. It will idnetify the RHS assembly loop correctly if the profliing region is around the assemble() call in firedrake and is not a LHS.