Added logic to properly refine diagonalized domains.

Added code to recognize diagonalized domains (unstructured) and their
structured counterpart. Basically, for a given structured domain the
code looks for an unstructured domain that uses the same set of
connectors. If such a match is found it is assumed that the unstructured
domain was created by diagonalizing the structured domain.

An array is populated with the found domain pairs and information
regarding blocks that use the diagonal domains is gathered (so these
blocks can be regenerated).

The connector re-dimensioning process is divided into two stages, first
connectors that belong to edges that delimit structured domains (they
need to be balanced) are re-dimensioned and then every other connector.
If an unbalanced edge is found, the code attempts to balance it using
the function *balanceEdge*. Please note the limitations of this
balancing function:
* The function attempts to balance only edges belonging to structured
domains that are not being used by any block. This means, domains that
exist with the sole purpose of creating diagonal domains.
* The function currently adds/removes the needed grid points to the
connectors with the largest dimension.
* This function is simply adding/removing a point from a connector, no
special treatment is done to connectors with sub-connectors.

After all the connectors have been re-dimensioned, the old diagonal
domains are deleted and new domains are created.

After all the diagonal domains have been recreated (with the new
dimensions), all the blocks that use them are regenerated. All the block
information previously cached is restored (block's boundary conditions,
trex conditions and solver attributes).