typeof and (program) interfers.

Imported from http://bugzilla.roxen.com/bugzilla/show_bug.cgi?id=3170

Reported by Martin Nilsson, IDA nilsson@pike.ida.liu.se

// bug.pike
int main(int num, array(string) args) {
  function(array(string):int) foo;
  werror("%O %O\n", typeof(foo), _typeof(foo));
}

[nilsson@m222 nilsson]$ pike bug.pike function(array(string) : int) zero

// bug.pike
int main(int num, array(string) args) {
  program p = (program)"a.pike";
  function(array(string):int) foo;
  werror("%O %O\n", typeof(foo), _typeof(foo));
}

[nilsson@m222 nilsson]$ pike bug.pike program(object) zero

// bug.pike
int main(int num, array(string) args) {
  function(array(string):int) foo;
  werror("%O\n", typeof(foo));
  program p = (program)"a.pike";
}

[nilsson@m222 nilsson]$ pike bug.pike
function(array(string) : int) zero
Cannot perform cast to that type.
bug.pike:5: main(1,({"/home/nilsson/bug.pike"}))