SIMD, fmath, compiler directives

A grab bag of changes to OIIO headers, for some in-progress performance stuff I'm working on over in OSL land:

* Continued work on simd.h: more functionality (including abs, min, max, ceil, floor, floori, xor, shift left and right, transpose, unary minus, conversion, bitcasts), some special cases for SSE 3 and 4.x, some minor corrections and fixes (including bugs in int reduce_add and int4(float4)), more unit tests.

* Minor changes to bilerp and trilerp templates in fmath.h: change some (TYPE)val to TYPE(val), which is to get those templates working correctly for certain classes that have constructors but no obvious way to do casting. (Dual2<>, if you must know.)

* Additions to platform.h establishing macros that letting you declare functions as "pure" or "constant", not throwing exceptions, or that a function or variable is potentially unused (and should not warn). I'm still experimenting to understand under which conditions it's good to use these, but at least putting them in this central place makes it easy.





There are two intrinsics -- one that takes an immediate int and shifts all slots by the same amount (_mm_sr[la]i_epi32) and another that takes an int4 and potentially shifts each channel by a different amount (_mm_sr[la]_epi32). I believe I have used them correctly, notwithstanding the discrepancy about how the sign bit is treated.