parser: Check for conflicting ALIAS name

It seems pointless and dangerous to allow different ALIASes to be specified
in the DECLARE statement and procedure body (which ALIAS will it use when
calling the function and emitting its body?), so the compiler should show
an error in case a different ALIAS than previously specified was given in
the body.
Fix ICE in symbLookupAt() on Enum declared in Extern block

symbAddEnum() currently won't allocate the enum's hashtb when
not using FB_MANGLING_BASIC, so symbLookupAt(), or rather the
hashLookup(), would just crash due to divison by zero because
the hashtb has zero size.

The crash on
	dim shared enum1 as Enum1
happened because the compiler treated enum1 as namespace prefix,
reported a missing '.' error, and then tried to lookup the AS
in the Enum1 namespace.
Fix ICE on Explicit Enum inside Extern block
Remove special behaviour of ENUMs inside EXTERN blocks

This behaviour was added in 468769a6, but I think it's better to keep Enums
behave the same no matter whether inside Extern blocks or not, just like
any other constructs.
Fix symbTypeToStr()'s procptr handling

symbTypeToStr() used to simply return "FUNCTION PTR" for any procedure
pointer, but that's obviously not good enough to distinguish different
parameters, calling conventions, result type, etc. during comparisons
such as
	#if typeof(A) = typeof(B)
and it's not pretty for #print typeof() either.

This patch improves symbTypeToStr() to take these things into account,
and fixes the same issue for the error module's function signature
reporting.

- symbDemangleFunctionPtr(), symbDemangleMethod(), etc. in symb-proc.bas
  renamed to *ToStr, because they don't really demangle anything, they
  just create an FB code representation (pretty, human readable) of a PROC
  symbol.

- Adjusted the *ToStr() functions and symb_dtypeTB() to
    - take into account calling convention
    - produce "() as integer" instead of "bydesc as integer"
    - produce "as any ptr" instead of "as void ptr"
    - in -lang fb, omit Byval/Byref if it matches the default for the
      parameter's data type anyways (so that "as integer" and
      "byval as integer" become the same; they're the same type afterall)

- symbTypeToStr() now re-uses the functions from symb-proc.bas to produce
  strings from procedure pointers

- symbTypeToStr() is now recursive (due to parameters on procedure
  pointers), so I changed it and various related functions to return STRING
  as-is instead of using a static string and returning a pointer to it.