Add tag generation for the module code

Adds ctag support for chapel via the --regex and --lang[def|map] options
and uses it to generate tag files for our module code. `ctags -e` is now
used to generate the emacs format for compatibility with these options.

Also consolidated a few rules in the .gitignore for tag files, we now
generally ignore any tags or TAGS file.
Remove type declarations from Chapel tags

While it might be nice to have type declarations in the tags, we tend
to use them as variables in quite a few places and this leads to many
duplicate tags.
Add a new chpltags utility

chpltags wraps both Exuberant Ctags and etags, allowing for the creation
of both emacs and vi compatible tag files for Chapel code. This new
script is now being used to create the tag file for the modules. The
ctags.chapel file that was being used previously has been removed
Improve the chpltags help message

Improved the chpltags help message based on feedback from
@thomasvandoren.

Added a check to ensure that a ctags executable can be found before
calling it.
Introduce ParamForLoop as a thin veneer on BlockStmt
Removed checks and assertions upon form_Map.
Add a space after node ID (upon --gen-ids).
ParamForLoop: Refactor the constructor
Convert ParamForLoop to inherit from LoopStmt
Merge pull request #989 from noakesmichael/param-for-loop-0

Introduce the statement ParamForLoop

This is the remaining looping AST node that relies on loop state within BlockStmt.  Introduce a new AST node for this type of loop that inherits directly from LoopStmt.

1) Introduce a simple version of ParamForLoop as a direct decedent of BlockStmt

2) Add a "factory" method on the class ParamForLoop to support the parser/builder.

3) Migrate ParamForLoop from a direct dependence on BlockStmt to a direct dependence on LoopStmt.

Compiled: STD clang/darwin, STD gcc/linux64, LLVM gcc/linux64
Tested: paratest --verify
Review: none
Introduce virtual overrides for blockInfoGet/Set and the method paramInfoGet
Introduce functions is/toParamForLoop(BaseAST* a) and virtual method isParamForLoop()
Add virtual methods getFirstExpr/getNextExpr and add a guard to catch any unexpected uses of ParamForLoop::blockInfoGet
Add virtual methods for codegen (flag an error if invoked) and verify
Add support for AstVisitor
Merge pull request #990 from noakesmichael/param-for-loop-1

ParamForLoop: Flesh out the implementation

Begin to separate ParamForLoop from BlockStmt; for example introduce paramInfoGet/Set to serve the role currently played by BlockStmt::blockInfoGet/Set and override the latter virtual methods with implementations
that print a warning message if the abstraction is being violated.

Add the core set of utility operations e.g. isParamForLoop(), toParamForLoop(), getFirstExpr/getNextExpr,
and support for AstVisitor.

Compiled STD clang/darwin, STD gcc/linux64, LLVM gcc/linux64
Tested: paratest --verify
Review: none


local implementations of the virtual methods blockInfoGet/Set that generate warning messages if they are invoked so that we can
Merge pull request #987 from vasslitvinov/restore-space-in-generated-C-code

Add a space after node ID (upon --gen-ids).

There is often a space missing after the node ID in the generated code, e.g.:

  /* 889339*/ ret = type_tmp;

This space disappeared due to 23311c03 aka r20461, which commit
was unrelated:

+      info->cStatements.push_back("/* " + numToString(stmt->id) + "*/ ");
-    fprintf(outfile, "/* %7d */ ", stmt->id);

I am restoring this space for convenience highlighting in emacs
and for consistency.

Reviewed by Mike.
Merge pull request #986 from vasslitvinov/remove-checks-and-asserts-upon-form_Map

Removed checks and assertions used with form_Map().

The files createTaskFunctions.cpp and implementForallIntents.cpp
contained these idioms:

  form_Map(SymbolMapElem, e, ...) {
    INT_ASSERT(e->key);
    ...

and/or

  form_Map(SymbolMapElem, e, ...) {
    if (Symbol* sym = e->key) {
      ...

Since the 'form_Map' macro only yields non-NULL things by design,
the above assert and check are not needed. I am removing them.

I also replaced:      vars->put(sym, arg);
with the equivalent:  e->value = arg;
for efficiency.


These changes can also be applied to flattenFunctions.cpp.
I did not do so, to keep that code undisturbed.

Reviewed by Mike.
Fixed .bad mismatch for hplx.chpl.
Merge pull request #991 from vasslitvinov/fix--hplx.bad--mismatch

Fixed .bad mismatch for hplx.chpl.

This test has been failing in more and more diverse ways.
I keep relaxing PREDIFF to accept these failures, so I can have .bad
and match clean against it.

Or, Kyle suggests, maybe this test shouldn't have a .bad?