BSDF::sample refactor, part 1

This PR moves most of the parameters and return value of BSDF::sample to a new class called BSDFSample. The benefit of this is that BSDFSample can be extended easily to add support for 
ray differentials, IOR tracking, OSL bump and normal mapping, ...

For now, all members of BSDFSample are public. I plan to change it in following PRs, making things private and adding inline accessors.

Should `sample.m_mode` be set to `Absorption` here?