verilog: Add support for SystemVerilog

* Includes support for data types introduced in SystemVerilog and "class".
* Add basic SystemVerilog test unit.
verilog: Add no-context test cases

Guarantees that parser does not fail when finding tags without a context.
verilog: Add support for SystemVerilog programs

Also include support for lifetime keywords "static" and "automatic", which can
also be part of program declarations. These keywords are currently ignored.
verilog: Add support for SystemVerilog interface
verilog: Do not require context to find a new block

Process named blocks defined outside the context of a container (e.g. if it is
defined in a file to be included within other files). To achieve this,
currentContext is created in the initial parser call.
sh: Move check for accepted identifier chars to a helper function
sh: Move parsing of strings to separate helper functions
sh: Don't skip an extra character after identifiers

If an identifier isn't followed by an open parentheses, don't eat away
the character.
sh: Add support for here-document
sh: Add support for indented here-documents
sh: Add test case for Bash here-strings

They look similar to here-documents but the parser need not to
misinterpreted them as such, so add a test to make sure it doesn't
happen.
sh: Fix here-document handling to allow whitespaces before the word
sh: Add test case for a subtle delimiter
sh: Improve a test case to be more easily debuggable

Avoid using the exact same function definition to catch buggy behavior
to avoid CTags output deduplication and ease locating the issue.
verilog: Add support for SystemVerilog assertions
verilog: Use tokens to store extra identifier information
sh: Add support for empty quoted here-document delimiters
verilog: Support functions with range or type defined
verilog: Improve support of functions and tasks in SystemVerilog

In SystemVerilog function, task, etc declarations support a simple typeless port
declaration such as:

function mult(a, b);

Add support for such port declarations by searching for any non-keyword tag,
ignoring its direction and type. The same algorithm is also used in task
declarations.

Also add support for extern functions and tasks.
verilog: Create dropContext() function