!.[]* in type name

I have fixed it so that in declarations like the following

FOO* or 
FOO[]

the * and [] will not be fontified in type name face, which is consistent with c++-mode.

This should be okay for the majority of the case. However, it is very difficult to parse all possible types with regexps because technically you can have stuff like these as a function return type or variable type:

TFoo!(char*, int[], TBar!(int))