Implemented sat_invd:mutate/1.

Adopts flip-bit mutation with a rate equal to the inverse of the number
of variables.

Note that each individual still needs to be seeded differently.
Implemented sat_invd:crossover/2.

Uses a two-point crossover technique.
Renamed var/s attribute to clause/s.
Implemented sat_invd:evaluate/1.

Uses the following defintions as taken from De Jong (1989):
  (1) val(NOT e) = 1 - val(e),
  (2) val(AND e1 ... en) = AVE(val(e1) ... val(en)),
  (3) val(OR e1 ... en) = MAX(val(e1) ... val(en)),
which provide a differential payoff property.

Originally had idea to fully substitute the formula with all the
variables. This may be done for ease of converting to a tail-recursive
procedure.
Fixed issue with orelse in guard expressions.

Requires use of andalso instead of a comma.
Added parameter to specify seed in start() functions.

Previous implementation now defaults to calling erlang:now().
Renamed utils module to rand_utils.

Also changed function random/3 to uniform/3.
Created function rand_utils:new_seed/0.

Generates a 3-tuple of integers between 0 and 100000 (inclusive).
Generated a new seed for each individual process.