Refactoring APIs for search operations, perf improvements.

Added support for longer-running operations that may reuse or create
new handles to track. As well, added INLINE pragmas for much of the
internal API to improve performance. (Subjectively, 10x faster when
compiled without any optimization. Greatly improved test run times.)
Implement HyperDex search.

There is possibly a race condition in search that occasionally leads to a
`Left HyperclientGarbage` result too soon. When that condition does not
occur, the search succeeds to completion.
Commit demonstrates race condition-like behavior after tests execute.

For a good demonstration of this, do:

cabal configure --enable-tests
cabal build tests
./dist/build/tests/tests -a 1 -t atomic/list

The -a parameter sets the number of iterations to 1 and the -t parameter
selects a subset of tests that will only do a small amount of work on the
database.

There are a few tracing statements in choice locations to demonstrate where
the problem lies and how it occurs after invoking hyperdex_search. The result
of calling it too soon after creating a hyperclient is a negative handle, which
per the spec indicates the status pointer should be set. The value then is either
HYPERCLIENT_POLLFAILED or HYPERCLIENT_INTERRUPTED.

This problem is not isolated to hyperdex_search, but this is the first time
I've seen the issue reoccur with such frequency. The threadDelays in the
preamble function of test/main.hs were originally implemented to prevent
this problem, but it appears that even so, after connecting the client on
line 53 of test/main.hs and adding a 250ms delay, the negative handle is still
often returned by the call to hyperclient_search.

In a test of 1000 runs without the delay using "-a 1 -t atomic/int", the results
were:

661 successes (termination with HYPERCLIENT_SEARCHDONE)
339 failures, negative handles returned immediately by hyperclient_search
  300 - HYPERCLIENT_POLLFAILED
  39  - HYPERCLIENT_INTERRUPTED
Demonstrate successful searches when using a warm client.

In this test, as opposed to the previous commit, the hyperdex_search
call is run using a warm client from a pool of clients previously used
for other tests. The testSearch test is the last one executed, and the
success of these tests can be demonstrated by running:

for I in {1..1000}; do ./dist/build/tests/tests -a 1 -t atomic >> ./testresults; done

Searching the output for HyperclientInterrupted or HyperclientPollfailed - the
Haskell names for each return code previously reported - yields no results.
Add search "test" to the end of main.
On *nix systems, use Posix API to block signals during search
Filter out empty values for more compact test output of hyperclient_search
Block GHC runtime signals in hyperclient call, retry interrupted
Implement GHC RTS signal blocking and transparent retry of hyperclient calls