Optimize element neighbor computation

Rebased and updated. The results remain the same: Mesh() ctor needs ~28% less instructions compared to ufz/master. The most difference goes to the `setElementConnectedToElements()`, which needs ~35% less instructions; This results in ~8% faster `readMeshToFile()`. Tested on 1e6 quad element mesh.

-- previous PR text --
Together with Tom we could reduce number of instructions for [`setElementConnectedToElements()`](https://github.com/endJunction/ogs/blob/1c9f9c7548565e9592c9cdd17b7eec0156df710a/MeshLib/Mesh.cpp#L176) function called in mesh ctor from 31.6e9 to 20.6e9 instructions, which is (the reduction) about 1/3 of the current implementation. As example a hexahedral mesh with 1.2e6 elements was used in MeshRead program.

Overall instructions in MeshRead example is from 56e9 to 45e9 instructions ~1/5.

Though creation of neighbor information is done only ones, the time spent their for smaller problems is significant.