Fixed divide-by-zero crash for issue 84

We can't pass a constant zero as a divisor when building KLEE expressions,
because KLEE invokes llvm::APInt's div functions, which crash on zero value
divisors.

To fix this, when we build a div/rem expression, we fist check if the second
oprand is klee constant 0. If it is, then it definitely causes UB, and we
simply skip building the corresponding KLEE expression and just return a
constant zero.
Merge pull request #102 from chenyang78/issue_84

Fix to Issue #84
cleanup a few overlong lines and trailing ws, etc.
remove the isTriviallyInvalid() solver
Merge pull request #105 from regehr/remove-istriviallyinvalid

remove the isTriviallyInvalid() solver
Merge remote-tracking branch 'origin/master' into cleanup
Merge pull request #104 from regehr/cleanup

cleanup a few overlong lines and trailing ws
hide Redis in a KVStore class

perform static profiling properly

take the port number of the Redis server from the command line

N.B. static profile counts for non-optimizations are off by 5x for the opt pass,
because the pass runs 5 times. I don't think we care since optimizations and
non-optimizations will always be ranked separately. profiling of
non-optimizations is a niche use case anyway.
Merge pull request #103 from regehr/redis-refactor

redis refactoring
change the serialized souper format a bit as suggested by Peter in email:
annotate each block with its number of predecessors; this simplifies parsing a
bit
bump LLVM in preparation for blog post
oops this slipped through my earlier patch to remove isTriviallyInvalid
Merge pull request #109 from regehr/blockpred

change the serialized souper format a bit as suggested by Peter in email
Merge pull request #113 from regehr/cleanup-triviallyinvalid

oops this slipped through my earlier patch to remove isTriviallyInvalid
Merge pull request #110 from regehr/bump-llvm

bump LLVM in preparation for blog post
ReplacementContext (was PrintContext) is produced by the LHS parser
and printer, and consumed by the RHS parser and printer; it ensures
that the mapping between names and pointers is consistent across
multiple conversions between Souper's internal and serialized
representations

also, making print names for vars optional and off by default
Merge pull request #111 from regehr/printcontext

PrintContext is produced by the LHS parser and printer, and
add a -souper-no-infer command line option that is useful for quickly loading
LHSs into the cache

add a tool cache_infer that runs infer() on each LHS in the cache; this is
useful for doing synthesis work without dealing with the tedium of building
software

add a couple of "parse only" options to souper-check so that cache_dump can
ensure that cache LHSs parse without incurrent the cost of running the solver

remove the spinner from cache_dump

a bit of refactoring in cache_dump
update the representation of the block instruction

We have changed the block's representation to "block n", so
update the relevant part in the documentation.
Merge pull request #118 from chenyang78/block_doc

update the representation of the block instruction