[sgen] Sanitize and fix pin_objects_from_addresses().

Assume we have an object at address 0x1000, with size 0xf0, then
a hole of size 0x10, and the next object starting at 0x1100, of
size 0x20.  In the pin queue we have the addresses 0x10f8 and
0x1100.

When we process the first pin queue entry, 0x10f8, we jump over
the object at 0x1000, to 0x10f0.  Then we skip the hole and end
up at 0x1100.  We set last_obj to that address.  Then we check
against the pin queue entry we're looking for and find that we've
overshot it, so we end our search and go to the next pin queue
entry, 0x1100.  There's an object at that address, but because of
this check we don't pin it:

	if (addr >= last_obj && (char*)addr < (char*)last_obj + last_obj_size) {

addr == 0x1100, last_obj == 0x1100, last_obj_size == 0x20