Encapsulated intersection calculations and fixed relative angle calculation issues

- Calculations for determining if and where a proton enters/exit the
reconstruction volume involves the same procedure, so this was
implemented as a __device__ function, which also reduces the amount of
persistent local memory used throughout the kernel
- There were issues with the calculation of relative angles from the
xy/xz angles directly because of the equivalence of -PI/PI so angles on
other side of boundary appear to have large relative angle.  This
required the relative angle to be calculate on the GPU at the time of
calculating other angles and this had to be maintained separately in
memory.  Fixed this issue and the relative angle can be calculated upon
need from the xy/xz entry/exit angles directly now.