Bug fix -- filterwidth() wasn't properly enforcing that it needs derivs.
Also remove type checking table entry for aastep, which was never implemented.
Implement aastep.

Change docs to remove description of the "filter" argument to aastep,
which I don't think is really necessary and I don't think was used in
previous renderers I worked on that provided that functionality.  It
makes the implementation a lot simpler.  I can always add it later if
requested.
Update docs after recent aastep change
Small optimization to SimplePool.alloc to avoid slow integer modulo.
New peephole optimizations:
(1) add A B C ; sub D A C => [add A B C ; ] assign D B
    (the add is elided as well if A is not subsequently needed.)
    And the same thing if the order of the add and sub are switched.
(2) OP A B... ; assign C A => OP C B...
    As long as A is not subsequently used and OP is a "simple"
    operation that fully overwrites A and writes to no other variables.

Looking at production shaders, the post-optimized number of
instructions, symbols, connections, culled layers, and size of JITed
code all improve by about 1-4% (depending on the thing being measured
and varying from scene to scene).  Rendering speed doesn't improve quite
as much, but every little bit helps.
CHANGES
Important bug fixes for the recent peephole optimizations:
* If you change an instruction so that a symbol was written to in a spot
  where it wasn't before, you MUST call block_unalias() to make sure to
  end any notion of its being an alias for another symbol at that point
  or later in the code block.
* Two code transformations that were legal only if a particular symbol
  was not subsequently read neglected to consider that output parameters
  or globals may be "read" after the shader is done executing and so not
  having later read instructions within the shader is not a reliable
  indicator.
filterwidth code gen bug when arg had no derivs -- wrong variable cleared
Update ref image after filterwidth bug fix
Support LLVM 3.3.
This is a joint effort from lg and Sven-Hendrik Haase.
Constant fold Dx, Dy, Dz, area, filterwidth when passed a constant
Improve debug output by not letting large arrays run on forever
Big thread contention speedup -- testing the m_groups_to_compile_count
atomic on every execution was hurting perf for simple shaders called
very frequently (as happens for volume shading). Moving it to happen
only when shaders are compiled, not every execution, and even then
guarding it with the m_greedyjit (which is usually off) improves perf
substantially for a certain kind of scene we're trying to speed up.
Make sure multiplying by a closure by 0 produces NULL
Add test for i386 target to ensure -march=i586 is set
to enable use of atomic cpu instructions
Better error handling of missing pointclouds
Constant fold add and sub for the mixed float/triple cases
Typo fixes in comments
Refactor: move is_zero & is_one from local to constfold.cpp into members
of RuntimeOptimizer.  Because these test internally whether the symbol
is a constant, we can also change some "if (A->is_constant && is_zero(A))"
to the simpler "if (is_zero(A))", and similar for is_one.
Latent bug fix: missed proper initialization of arrays of closures