Rewrite the PHP parser as a non-regex parser

Rewrite the PHP parser as a real parser, not using regexes.  This is
more complex but allows for better parsing.

Visible changes:
* Scope reporting;
* Variables inside functions are no longer reported (this is a
  deliberate choice, but can be easily changed);
* Only the PHP part is parsed (e.g. it doesn't report JavaScript
  functions anymore);
* Function arguments spanning several lines are properly reported;
* Interfaces are not yet parsed.

Otherwise the new parser should behave like the old one, at least
where it used to be right.  Parsing of more constructs and reporting
more details is planned.
PHP: report visibility and implementation type

Report visibility (private/protected/public) and implementation
(abstract or not) for every tag for which it makes sense.
PHP: report class inheritance
PHP: parse and report interfaces
PHP: fix parsing of functions returning a reference

Fix parsing of functions declarations with a leading ampersand (&),
used to make the function return a reference:

	function &foo($arg1, $arg2) {
		/* ... */
	}
PHP: make some arguments const
PHP: report anonymous functions as functions rather than variables

Generate a full function tag for anonymous functions:

	$anon = function($arg1, $arg2) {
		/* ... */
	};
PHP: fix generating variable tags for rvalues

Only generate tags for variable declarations without assignments inside
classes and interfaces not to get fooled by rvalues.

This prevents generation of a "$bar" tag for something like:

	$foo = $bar;

while still generating "$bar" tag for:

	class Foo {
		var $bar;
	}
PHP: generate tags for local variables (disabled by default)
PHP: parse HereDoc and NowDoc strings
PHP: parse namespaces

PHP namespaces don't work anything like a block, so the implementation
is specific and not combined with scope management.  Namespaces cannot
be nested, and they may apply either to the rest of the file (until the
next namespace declaration, if any) or to a specific block.

Namespaces applying to the rest of the file:

	namespace Foo;
	/* code in namespace Foo */
	namespace Bar\Baz;
	/* code in namespace Bar\Baz */

Namespaces applying to blocks:

	namespace Foo {
		/* code in namespace Foo */
	}
	namespace Bar\Baz {
		/* code in namespace Bar\Baz */
	}
	namespace {
		/* code in root namespace */
	}
Added new macro for reading last character of vString.

Import of CTags revision 719.
PHP: fix parsing functions arguments list containing comment or strings

Instead of hand-parsing the argument list and possibly choking inside
comments, strings, heredoc, etc., use the normal token mechanism and
simply convert the tokens to a string representation as the argument
list.  This technique might perhaps lead to some missing characters in
the argument list representation in the (unlikely) case a token
appearing in the argument list is reported as a generic type for which
it is impossible to know the correct string representation, but this
could always be fixed by adding a specific token type and is anyway
less problematic than maybe breaking further parsing of the document.
PHP: don't include the leading "$" in variable names
PHP: leave PHP mode inside single line comments

If "?>" appears in a single-line PHP comment it leaves PHP mode.
http://www.php.net/manual/en/language.basic-syntax.comments.php
PHP: support non-ASCII characters in identifiers

http://www.php.net/manual/en/language.variables.basics.php
PHP: parse traits

http://www.php.net/manual/en/language.oop5.traits.php
PHP: use "::" as the scope separator
PHP: show namespaces and traits in the symbol list
Return a non-printing sequence for no context separators

Function symbols_get_context_separator() returns the symbol
separator for the language, but some languages do not have
symbol context separators, for example markup languages like
Asciidoc.  To prevent the symbols pane wrongly detecting and
acting on a valid character sequence as a separator, return a
non-printing character which should not occur.

Options "" and NULL not used as they break some code and would
need an ABI bump.

Other languages can be added as they are identified.