Combine {Path,Particle}TracerPathType into TracerPathType

Add scaffolding in {Path,Particle}Tracer for handling "non-native"
path types.

Create new tracer.go file to hold common functionality between
PathTracer and ParticleTracer.

Also add new TracerContributionType type and use it.

Feature-Start: twpt-basic
Combine {Path,Particle}TracerWeighingMethod into TracerWeighingMethod
Combine {Path,Particle}TracerRRContribution into one type
Combined {Path,Particle}DebugRecord into TracerDebugRecord
Combine {path,Particle}Record into TracerRecord

Make it have a contribution field and an Accumulate() method that
uses it to accumulate correctly.
Add TracerWeightAccumulator class to keep track of MIS weights
Make PathTracer (partially) use TracerWeightAccumulator
Make ParticleTracer (partially) use TracerWeightAccumulator

Also make ParticleTracer always sample light spatial and directional
components separately for simplicity.
Keep track of alternate first pBack values in TracerWeightAccumulator
Make PathTracer properly keep track of backwards paths
Make ParticleTracer properly keep track of backwards paths
Implement TwoWayPathTracingRenderer
Add TwoWayPathTracer versions of all scenes

Feature-End: twpt-basic