Add a web version of the blame operation

This pull requests exposes the blame operation to web clients, as well as add some functionality to the core blame operation.

- BlameOp now supports blaming from any commit.
- Added a BlameException class to separate error messages from the core.
- Fixed an error that would occur if you used blame on a feature that was added, removed, then added back. (This is possible with revert).
- Added unit tests.

This PR depends on #615