Refactoring inference and separating classes.

Note: I wanted to get this all pulled in at once, so the refactoring and file-splitting are lumped together. See the [refactoring without the file-splitting](https://github.com/utiasASRL/openfabmap/compare/arrenglover:master...992cfc298d71af8b0d9e16c39653041923fa5313?w=1). See the [file-splitting only](https://github.com/utiasASRL/openfabmap/compare/992cfc298d71af8b0d9e16c39653041923fa5313...feat/infer-refactor?w=1).

This pull request accomplishes the following
- Refactor the binary inference out of the `FabMap` class and into an `Inference` class.
  - This is necessary for my future changes, I derive from the `Inference` class.
- Split the declarations from the monolithic `openfabmap.hpp` into several headers corresponding to `.cpp` files.
 - Users can still use the single-include `openfabmap.hpp` which includes all of the modules that make up OpenFABMAP.
- Add a bunch of Doxygen comments (not 100%, but getting there).