Issue title: Implement difference operation
 Issue body: It should be possible to create the difference of two shapes, using constructive solid geometry (CSG). There is currently a placeholder for this operation in the `fj` crate, as well as limited support for 2D differences, which is not directly related to this issue.

Implementing this requires more solid infrastructure for storing and querying shapes in the host application. Also see #42.
 Comments: 
 Comment 0: Blocked on #97.
 Comment 1: This is no longer blocked on #97!
 Comment 2: This is now blocked on #993. The same algorithm that's [needed for #42](https://github.com/hannobraun/Fornjot/issues/42#issuecomment-1225735872) is needed for this too.
 Comment 3: #993 has been addressed. This issue is no longer blocked!
 Comment 4: This operation will share much of its implementation with the union operation (#42), and I've recently labeled this as blocked, then no longer blocked, for the same reasons that #42 was blocked during that time frame. Now #42 is blocked again.

Instead of adding and removing the https://github.com/hannobraun/Fornjot/labels/status%3A%20blocked label a bunch of more times, I'm going to simply label this as https://github.com/hannobraun/Fornjot/labels/status%3A%20blocked on #42. Even though that isn't completely accurate, it will prevent this issue from seeing the same block/unblock churn that #42 is seeing. In addition, it wouldn't make sense to start work here anyway, right now. The groundwork required is the same that #42 requires, so it really makes no sense to start working on this issue in parallel.
{'source': 'GithubIssues', 'repo_name_with_owner': 'hannobraun/Fornjot', 'issue_id': 1108199123, 'repo_stars': 1105.0}