Use "//", not "#", for comments in SWIG input.

One Doxygen test file used "#" for comments for some reason, this doesn't work
with the latest SWIG trunk where a lone "#" is considered to be an unknown
preprocessor directive.
No changes, just make checking for Doxygen structural tags more sane.

Replace an if statement with 33 conditions in it with a table and a loop.
Fix structural Doxygen comment recognition in the parser.

The code wrongly recognized something like "@direction" as a structural "@dir"
comment (why is the latter structural is another question).

Add a check that we've really found the entire tag and not just a prefix of
some other tag.
Stop completely ignoring many Doxygen comments.

For some reason, Doxygen comments such as @class or @enum were considered to
be "structural" (whatever this means) and completely removed during the
parsing time. This is wrong as such comments can be attached to their
corresponding declarations and while it would be arguably better to check that
this is indeed the case (e.g. "@class Foo" really appears before or after the
declaration of this class), throwing them away is definitely not the right
thing to do and keeping them without any further checks is a better alternative.
Add a possibility to flexibly ignore custom Doxygen tags.

Add %feature("doxygen:ignore:<command>") implementation, documentation and
test case.

This feature allows to use custom tags in C++ Doxygen comments for
C++-specific things that don't make sense in the context of the target
language and also allows to insert contents specific to the target language in
the C++ comments using (different) custom commands, which is very useful in
practice to explain the particularities of the API wrappers.