Moved reductions into a separate file and added an implementation of #2. Im not confident enough in it to make it the default. Also some ifdef guarding of OpenMP work