Add basic support for the Elements language.

This adds the basic support for the Elements language that is designed for writing arrays in parallel. The language allows parallelism by construction and is a a perfect match for writing Push vectors to memory. There are four simple constructs in the grammar:

expr ::= ... | materialize l elements
elements ::= skip | write ix expr | elements `par` elements | parFor l (\ix -> elements)

This  patch adds the language support. The vector libraries in the tree are left as is so the patch should not break anything if it does contain bugs. I have tested the language with various programs using:

*) Push.hs in master.
*) PullPush.hs in the arrays branch.
*) MultiDim.hs in the arrays branch.

Feldspar-compiler-support coming in the next pull request. Idea by Koen Claessen, grammar communicated by Josef Svenningsson.