[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
[sgen] Simplify pin_objects_from_addresses() and fix potential performance issue.

In the case where more than one pointer pointed to the same empty region within
the nursery we would search through that empty region for each pointer instead of
just once.
[sgen] Small simplification of sgen_pin_objects_in_section().

We only have one section, which is the nursery, so don't even pass it in.
Furthermore, it's only called locally, so make it static.