Performance optimizations

* optional link to google's tcmalloc allocator
* change all `Arc` usage to be `const Arc*`
* create a cached Arc pool for reusing Arc objects between resource exchanges.

For large simulations (hundreds of reactors), uses ~20% less memory, and runs about 15% faster.  If tcmalloc is available for linking, runs about ~40% faster (instead of 15% faster).

I'm not suggesting we actually accept any/all of these changes - just submitting the PR as food for thought and discussion.  Some of the changes do break API - although they are arguably API's that nobody has used outside the kernel (and perhaps nobody will ever use outside the kernel).