Make $ built in operation, rename ($) to apply

Slightly controversial, but I think it is better this way.

Main advantage:
Plays much better with disambiguation (which doesn't work especially
well with HOFs since it looks at the goal type and the types of each
argument to disambiguate, and if a function is the argument to $ we've
lost some of that information). This will make elaboration quicker in
some cases. $ is quite handy notation and we don't want to discourage it
just because it slows down the elaborator.

Main disadvantage:
Very occasional use in HOFs itself. Hence the new function 'apply' which
does the same thing.