Cache the last satisfying assignment on a path

Original title "Implemented the saving of satisfying assignments
to reduce queries"; edited by SMcC to avoid spurious white
space changes.
Add -git-version option

To easily check which GIT revision a binary was built from.
For instance to double check that your binary has a particular
bug fix. The output would look nicer if we had proper version
numbers; for now it will just be a hex revision plus a possible
"-dirty".
No-op implementation of fsync().
Memoize formula analysis routines

This avoids an asymptotic blowup if the formulas have a lot of shared
subterms.
Introduce a "map_expr_temp" in the formula manager to encode this
kind of traversal and caching.
Add flushes to some more tracing printf()s, which makes it easier
to see where FuzzBALL is spending its time when it's slow.
Add a -target-string-file option

Like -target-string, but it reads the target data directly from a file,
which works better with binary data.
Avoid divide by zero in guidance heuristic
Add a new experimental kind of target guidance

Currently enabled with -target-guidance 2.0. Unconditional, but
limited to states that are the best we've even encountered.
Add GIT-based STP compilation instructions

Keeping the SVN ones for the moment, since the GIT version is less
stable now and doesn't have any must-have bug fixes.
Disable tables of size 1

This corner case was triggering a near-infinite loop. Also add a sanity
check iteration limit to simplify_fp, which wasn't the problem this time
but could also easily loop if there are other problems with
simplification.
Replaced occurrences of "or" with "||".

"or" is deprecated as of OCaml 4.01.
Implemented caching of satisfying assignments.

Pointers to every satisfying assignment the query engine produces
are stored in a global cache, and pointers to every satisfying
assignment that satisfies the current path are stored in a
working cache. Before a query is made, the assignments in the
working cache are checked against the path condition for a
satisfying value. If a satisfying assignment is found, the query
is not carried out.
Fix minor typo in INSTALL
Tweak numbering of STP input files for ease of use

Make each file name from a run unique without needing to account
for the directory name as well.
Modify the STP library interface for the latest STP

Don't simplify the expressions for variable names before using them
to look up a counterexample, and if get_term_from_counterexample
returns a term that is neither a BVCONST (completely constrained)
nor a SYMBOL (completely unconstrained), fall back to get_counterexample
which should always return an BVCONST.
In INSTALL, mention more packages used by STP
Implement recvfrom, other minor networking improvements

Enough to get some DNS-using example programs to run more often,
though I still think not correctly.
Reorder Binutils library uses

For apparently the first time recently I ran into a situation where
libopcodes depended on a function from libiberty (FP formating used
on ARM). I hope the opposite should still never happen, so swap them
in the order (order matters for static libraries).
Add basic support for running PIEs (and ".so"s)

The key difference is that whereas traditional executables are already
set up on disk for their preferred location, for a PIE or .so we get
to pick the location. For now we just use the traditional location,
as usual we have no ASLR.
Implemented a cache pruning mechanism.

The mechanism halves the size of the global satisfying assignment
cache when it gets larger than the limit set by the option
-global-ce-cache-limit. The default limit is 10,000 entries. The
pruning mechanism works by throwing out the assignments that have
been used the least since the last pruning.
More improvements to networking syscalls

Fix write_sockaddr (had had an off-by-one misunderstanding of
String.index_from)
Add readv, recvmsg, sendto, sendmsg, and further factor out iovec
handling