Fix null pointer exceptions
Mark AST nodes that refer to generic parameters

Two AST nodes classes: 'Typename' and 'Identifier' are enriched with a flag
that is raised if the node refers to a generic parameter of the component it
occurs in (if it does not occur in any component the flag is lowered).
Moreover, expressions that appear in array declarators, initializers and
enumerators definitions are checked.
Add generating deep copy method for AST nodes

Each AST node class contains 'deepCopy' method after generation for Java. That
method is responsible for creating a new instance of the same class as the
node. Fields of this new instance are assigned according to the deep copy modes
associated with them in 'ast_nesc.py'.
Add generating methods for substituting AST nodes

Each AST node has two new methods: "substitute" and "setPasteFlagDeep". The
first one enables to use a machanism of nodes substitution and the second one
allows marking nodes as pasted (or not) to the tree.
Implement substituting references to generic parameters

A class responsible for replacing references to generic parameters with
provided types and expressions is implemented. Moreover, a new module,
'nesc-core' is created. It is intended to perform instantiation of generic
components and creation of the graph of provided and used interfaces and bare
commands and events.
Small fixes for expressions analysis and AST building

Additional occurrences of identifiers have set the flag about referencing
a generic non-type parameter. Moreover, aliases of component references
are now set in AST nodes.
Implement instantiation of used generic components

The procedure of instantiation of generic components that are used is
implemented. All necessary components are created by copying AST nodes of
generic components and substituting references to generic parameters in copies.
If a cycle in the instantiations is detected, it is reported by throwing an
exception.