Add a "spatial join" method.

Fixes ISSUE #83.
- This allows for joining different types which are aligned to different
  ReferenceRegions
- A record will appear in multiple different places when it overlaps
  multiple different regions

We're still tinkering with this commit -- we'll be adding more comments, tests, etc. -- but feel free to review and give us comments as soon as you can.