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: unify-tracers
Add utility functions to TracerPathType and use them in {Path,Particle}Tracer
Add TracerPathType.HasAlternatePath() function and use it

This moves the path calculation logic in one central place.
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.

Feature-End: unify-tracers
Add TracerWeightTracker class for {Path,Particle}Tracer to compute weights

Feature-Start: tracer-weight-tracker
Make PathTracer use TracerWeightTracker
Make ParticleTracer use TracerWeightTracker

Feature-End: tracer-weight-tracker