Open file only when necessary.  Part of issue #123

This change is to make sure that we only open the file whose
language we are trying to figure out only when it is really
necessary.  In addition, code that supports templates (identified
by their extension .in) has been moved to execute before the code
that looks inside the files.  All unit tests pass.

Warning: I removed a piece of code commented thusly:

  This is needed for backward compatibility about #line directive
  behavior.

I do not know what this is about, either this is no longer
applicable or we need another unit test
Added initial D language support.
Fixed regression with C++ delete and Java enum keywords not being recognised.
Added a simple unit test for the D language.
Fixed up whitespace.  No code changes.
Minor renaming of macros.
Merge pull request #132 from fishman/defer-fopen

Open file only when necessary.  Part of issue #123
sql: Drop use of trashbox and setjmp

Add new token type to identify EOF and use it to break out of loops, properly
cleaning all local memory allocations until parser terminates.
Merge pull request #138 from vhda/sql/drop-trashbox

sql: Drop use of trashbox and setjmp
Merge pull request #133 from nomad-software/dlang-support

Added initial D language support.
SQL: Simplify and unify style for all tests

This hopefully makes the test conditions more readable and helps
avoiding mistakes when modifying them.
Merge pull request #149 from b4n/sql/tests-cleanup

SQL: Simplify and unify style for all tests
go: Add a few basic test cases

From https://gobyexample.com/
go: Drop use of setjmp()/longjmp()

This makes the code more straightforward to read and simplifies
resources management.
go: Don't abort on invalid input

This makes the parser more forgiving about malformed input, and prevent
abortion of the whole CTags process if an invalid Go file is found
among the files to process.
go: Fix handling of the less-than operator (`<`)
Use only characters valid for go identifiers
Keep backslash in string if not followed by ' or "
Remove unused TOKEN_CHARACTER
Return correct token for semicolon

Semicolons aren't mandatory but can be used and separate multiple
statements on a single line.