This commit combines the sweep step with moving objects. With this
commit, we can do:
```ruby
GC.start(compact: true)
```
This code will do the following 3 steps:
1. Fully mark the heap
2. Sweep + Move objects
3. Update references
By default, this will compact in order that heap pages are allocated.
In other words, objects will be packed towards older heap pages (as
opposed to heap pages with more pinned objects like `GC.compact` does).
Add a description about optional hash objects for GC.stat and
GC.latest_gc_info. [Bug #14408]
The patch is provided by sho-h (Sho Hashimoto).
Thank you so much.