BSDF::sample refactor part 2

- Moved SamplingContext to BSDFSample.
- Made BSDFSample members private.
- Added accessors.
- Removed unused DirectLightingIntegrator constructor.

Maybe we could introduce methods such as `BSDFSample::is_absorption()`?