This patch adds support for the OptiX denoiser as an alternative to the existing NLM denoiser in Cycles. It's re-using the same denoising architecture based on tiles and therefore implicitly also works with multiple GPUs.
Unfortunately the currently released drivers do not support tiling natively yet, neither do they accept arbitrarily-formatted data as input. The APIs for that are already there, but they are not implemented. So I had to add some workarounds for it to work anyway (e.g. the tile data is first copied into a tightly-packed RGB buffer and the result later copied back into the tile buffer). These are guarded with a "OPTIX_DENOISER_NO_PIXEL_STRIDE" define and can be disabled once the drivers support this for even better performance.
Two new options were added to the UI: one to switch between the OptiX denoiser and the NLM one and one to change which model the OptiX denoiser should use ("Color" only operates on the color data, "Color + Albedo" also takes albedo data into account which can help to preserve finer details).