Reduce the memory necessary to find simple function.

In findFunction we now use a very simple parse step that dectect whether the
name search (which is already supposed to be an unqualified name) is a simple
identifier, a constructor name or a destructor name.  In those 3 cases, we can
easily create the UnqualifiedId object that would have resulted from the 'real'
parse.   By using this direct creation of the UnqualifiedId, we avoid the
'permanent' cost associated with creating a memory buffer and the associated
FileID.

If the name is a template or an operator, we revert to the regular parse (and
its associated permanent cost).

In the operator case, the additional work is in the case of a conversion
operator where we would need to 'quickly' parse the type itself (if want to
avoid the permanent cost).

In the case with the template the problem gets a bit worse as we need to handle
potentially arbitrary spaces and ordering ('const int' vs 'int  const', etc.)