Add yet another test re github issue #54, with heavy builtin usage

This fails with fmax() implicit declaration being assumed to return int,
     which doesn't fit well into the code
Produce a header from identifiers found in preprocessing, include it later

These identifiers include a lot of stuff, but most usefully names of all
functions that are called by the source. We can leverage this to
generate forward declarations for builtin functions that might be used
by the program, so it's parsed correctly.

Currently the header just includes #warning directives about stuff we
might need to declare, however.
Add back math etc builtin function declarations, but only if used

This is done by matching identifier tokens found by the lexer when
preprocessing against known builtin function names, and emitting
the correct _CL_DECLARE_... macro invocations for those which
match.

Note that the original _CL_DECLARE_... macros from POCL are used, but
only a few of them are usually invoked, with few parameters.

This reverts commit 5be1033f745f944b9484996b30a3394c16ecbe65.
Now that we declare used functions, re-enable warning for not doing that

However, first fix -I and -include flags in CLI webcl-validator;
otherwise some tests requiring that fail which accidentally passed when
the warning was disabled. Tests adjusted accordingly.

This reverts commit 600d0403c11ba85fc84360aaa95326bfc3a09fe3.
Add back half versions of vload/vstore vector function decls, as needed

This is tested by adding CHECK-NOT to vload-vstore-variations.cl test
for implicit declaration warnings. The half vload/vstore function
invocations in this test are fixed to comply with OpenCL so they don't
error when the prototypes are declared. Previously they were incorrect
but without declarations there was no way to tell.

This reverts commit f1f186d301f6ea358136eaf7c8de01e4c8ad8ff1.

Conflicts:
	lib/kernel.cl
Declare read_image{f,ui,i}, if used
Declare integer/float/double vload/vstore if they are used

The declaration helper macros added to kernel.cl for this are not
exactly the same as the ones removed in reverted commit 9a1e, as I thought
they produced way too many unneeded declarations with preprocessor-stage
textual matching. However, the new macros produce the exact same set of
declarations if vload/vstore of all widths are used.

vloada?_half could pretty easily use the same approach to gain five
times better granularity in choosing what to declare, but for now let's
keep it as is as it is a pretty rarely used function.

One test expected that invocations of vload4 with malformed
arguments would end up as far as VLoad::wrapFunction(), which
prints errors for that as a sanity check to prevent crashing.
With the declarations added, this is caught as early as the
first matcher stage, so a different error is printed - the test
is repurposed accordingly.

This reverts commit 9a1e2816415830e5f61d12fbea720cb11c1f4cd9.
In all builtin function tests with FileCheck, verify declarations

prefetch() was still missing and now has an oneliner fake declaration
added
Incredible optimization: Declare only two fake vers of a_w_g(_s)?_c each

This makes the test suite run in 45s instead of 70s on my setup.

It doesn't matter if we have the correct overloads or just ones taking
void * (which everything casts to) as all overloads are forbidden by
name in WebCLAnalyser. We can get there with just the void * dummies.
Merge branch 'wclv54'

Conflicts:
	test/read-image.cl