Update 42: Implementing bidirectional edges.

In GP2's textual syntax, a bidirectional edge has a (B) tag appended
to its ID. Thus, parsing a bidirectional edge is identical to parsing
a root node, using the new token BIDIRECTIONAL. Parallel bidirectional
edges are not allowed, so the semantic analyser needs to keep track
of each bidirectional edge encountered in the program. This is achieved
by a linked list of structures where each structure contains the
necessary information to uniquely identify a bidirectional edge.
The structure is defined in seman.h and the semantic analysis code
takes place in graphScan.

seman.c
- Added a check at the end of semanticCheck to ensure the function only
  returns at the end of the global declaration list in the AST.
Merge branch 'master' of https://github.com/UoYCS-plasma/GP2 into dev