Make NeighborhoodAccessibles work on potentially unbounded RandomAccessible.

Shape.neighborhoodsRandomAccessible(source) doesn't require bounded source anymore. It works on any RandomAccessible source now, instead of requiring RandomAccessibleInterval as before.

The randomAccess(interval) on these neighborhoodsRandomAccessibles work as
expected now. That is, they extend interval by the required span and
operate on source accesses optimized for that extended interval.

Also, now HyperSphereNeighborhoodRandomAccess extends
HypersphereNeighborhoodLocalizableSampler, as it should, instead of reimplementing that functionality.