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.
I just noticed the existence of these ON_BOTTOM, ON_TOP, and ON_INTERIOR_FACETS. Can someone remind me of why we have element-related concepts in PyOP2, which should just abstract from them? Or what am I missing?