1. Adpot John's code review suggestions in IndexLookup.cc/IndexLookup.h

2. Revise comments in IndexLookup.cc/IndexLookup.h

3. Redesign unitests for IndexLookup.
Helper script to run index scalability experiment in clusterperf.
Iterates over number of indexlets, i and runs clusterperf for i
indexlets and prints the maximum thoroughput.
Rename ServerControl --> ObjectServerControl for clear distinction.

Makes clear that the rpc targets the server that owns the particular object.
Added default arguments for objectServerControl
Added a new command line argument to ClusterPerf to specify the
number of secondary indexes/object.

Hack in clusterperf.py to make sure that we never wrap around the
host list. This is because if a tablet and its corresponding
indexlet end up on the same server, the server will deadlock. This
also relates to the synchronization or lack thereof of the write
RPC handler in MasterService.
Documentation improvement.
Total rewrite of Buffer.h and Buffer.cc to simplify and reduce latency of key operations. Made a few interface changes along the way:
* Added several new methods, such as emplaceAppend, emplacePrepend, alloc, and allocAux. Will eventually eliminate all of the placement new operators.
* Changed Iterator interface to eliminate references.
* Replaced truncateEnd with truncate.
* Added size() method as eventual replacement for getTotalLength.
* Removed Chunk::prependChunkToBuffer, Junk::appendJunkToBuffer.
* Eliminated most const declarations; just too much hassle.
Fixed bug in ClusterPerf.cc where checkBuffer was failing on results
from MultiRead (was comparing entire buffer, rather than just the value).
Also made a few small improvements in output formatting.
Fixed test in ObjectTest.cc that wasn't properly updated when Object structure changed (I'm not sure how this test could have passed).
Changed TransportManager::getSession and related methods to take a string as argument instead of char*; the old approach required a std::string to be fabricated from a char* on each call, which was expensive.
Modified InfRcTransport::ClientRpc::sendZeroCopy so it doesn't call Buffer::getNumberChunks repeatedly (this is no longer a fast operation). Also, don't use zero-copy for short chunks (additional chunks introduce overheads).
Added delay in FailureDetector before starting pings; otherwise a new
server may ping someone who hasn't yet heard of it, resulting in
extraneous cluster membership verifications.
Added log message in PingService if a ping is received from an
unknown server.
Modified ObjectFinder to cache SessionRefs so that it doesn't have
to call TransportManager for each lookup. Combined with the earlier
change to the interface, this saves about 140ns per RPC.
Trivial changes in clusterperf.py: alphabetized lists, adjusted timeouts.
Removed tracing code from InfRcTransport, which was accidentally left in place.
Fixed 2 bugs in new Buffer code that broke index clusterperf tests.
This commit undoes commits bfb888ae6578ec and 7e1abdb22f220, which
changed the defaul for the --totalMasterMemory option from 10% to
80%. The 80% value caused problems in several places: for example,
it makes "hooks/pre-commit" *very* slow, and if 2 people run it at
once, rcmaster will run out of memory. In retrospect, I'm not sure
the the "right production setting" is really the best default, but
in any case, if we want to do that, it will need to be a bigger
project in order to fix all of the collateral damage.

Also, I changed the value from 10% to 500 (500 Mbytes seems like a
reasonable value for tests and kicking the tires; 10% doesn't seem
particularly meaningful).
Fixed bug that caused segmentation faults during exit. ObjectFinder
was retaining cached SessionRefs until after transports had been
destroyed; when it eventually released them, crashes occurred.
Minor fix in multi-ops to reduce fragmentation in buffers.