Fixed major bug in service resizing

When service pooling is not used and services are reallocated
beyond the original allocation size, the API had no way to convey
the new pointer back to the caller.

Rather than invent that mechanism, I went with a much more standard
route of giving the service objects internal pointers to their data
so the data can be reallocated without moving the whole object.
This cleaned up the code significantly.

Also changed the interface for --service-pool and --fd-pool so that
users are specifying the size for data, and not the overeall size
including struct and name.