Only call op2.init if PyOP2 is not already initialised

Previously we only checked a module level global telling if Firedrake
has already initialised PyOP2. As a consequence, the first call to the
Firedrake API was calling op2.init() with no argument, thereby
reverting any custom arguments the user might have passed to op2.init()
before.
Bump version to 0.4.0
Refactor global firedrake calls in expressions test
Refactor global firedrake calls in mesh gen test
Add a test verifying correct initialisation behavior