Added evtp
evtp: Remove schedule_back atomic integer optimization

My (perhaps not very representative, but oh well) benchmarks do not show
any significant difference with or without the optimization.  This isn't
too surprising, considering the optimization existed to prevent
excessive calls to the wakeup function. But libev's ev_async already
performs similar optimizations, so it doesn't help a lot.

This removes the use of atomic integers altogether and simplifies the
code a bit.
evtp: Merge locks when queueing back done_func

It's safe to call ev_async_send() within a lock, so the only reason for
releasing the lock around it would be to avoid lock contention if
ev_async_send() degrades to a system call. However, ev_async_send()
tends to *not* degrade to a system call when there is a lot of activity,
so the overhead of an unlock/lock is more likely to be
counter-productive in this setup.

My benchmark confirms this; It consistently runs about 10% to 20% faster
with this new code. (But again, my benchmark may not be representative
of actual practice, so take that as a "in some cases, this change
improves performance".)
evtp: Benchmark bug fix + added benchmark with some actual load

The fix is what I actually intended the benchmark to do. I re-ran the
benchmark on the previous commits, and my earlier conclusions on the
performance are still mostly valid. Also added a 'WORK' option to see
what happens under load. Here are the benchmark results on my PC (gcc
4.7.2 on Linux 3.7.8-1-ARCH x86_64). Compiled with -DNDEBUG -O3 and run
three times:

Without -DWORK:

  Orig:
    real  0m2.204s  0m2.200s  0m2.242s
    user  0m1.230s  0m1.200s  0m1.150s
    sys   0m2.420s  0m2.487s  0m2.597s
  Without atomics:
    real  0m2.227s  0m2.235s  0m2.222s
    user  0m1.223s  0m1.207s  0m1.190s
    sys   0m2.523s  0m2.540s  0m2.480s
  Merged locks when queueing done_func:
    real  0m1.569s  0m1.552s  0m1.543s
    user  0m1.157s  0m1.157s  0m1.190s
    sys   0m1.677s  0m1.613s  0m1.597s

With -DWORK:

  Orig:
    real  0m1.325s  0m1.342s  0m1.329s
    user  0m1.650s  0m1.740s  0m1.660s
    sys   0m0.403s  0m0.313s  0m0.400s
  Without atomics:
    real  0m1.316s  0m1.342s  0m1.329s
    user  0m1.680s  0m1.670s  0m1.700s
    sys   0m0.373s  0m0.390s  0m0.363s
  Merged locks when queueing done_func:
    real  0m1.391s  0m1.424s  0m1.407s
    user  0m1.730s  0m1.693s  0m1.653s
    sys   0m0.317s  0m0.350s  0m0.397s

With -DWORK the differences are rather minimal, which is to be expected
since most of the time is spent in the actual work. It is still visible
that with work, the lock merging clearly degrades performance a bit.

(Also interesting to see that without -DWORK, the removal of the atomics
slightly degrade performance. My earlier benchmarks gave the opposite
results. I'm guessing that differences as small as these just aren't
very reliably measurable. Luckily my "optimizations" were also
simplifications, so they were worth doing regardless.)
evtp: Don't hold a reference on the ev loop when nothing is queued
evtp: Added convenience function to alloc+submit work
evtp: Improved documentation for evtp_submit()