Record in Argument whether a buffer is read or written inside a GPU loop
Extend Load and Store nodes to accept multiple indices.

All existing code generators still use one single index which is calculated
from the original coordinates during storage flattening. Multiple indices are
used by the OpenGL backend to generate proper texture loads using texture2D(x,y).
Add OpenGL runtime for executing halide filters as GLSL pixel shaders.
Add code generator for OpenGL and enable corresponding target.

Also add a new loop type named "Kernel". Kernel loops are semantically
equivalent to parallel loops but are treated differently during storage
flattening: all access (Load/Store) to buffers from inside a kernel loop retain
multiple indices instead of using a single flattened index.
README for OpenGL
Add test application for OpenGL. Only partly working so far.
Fix typo
Verify that textures allocated by the host application are sufficiently large.
Convert between different pixel layouts in copy_to_dev and copy_to_host
if necessary.

OpenGL texture transfer only works with interleaved data.
Initialize OpenGL context directly without glut/glew
Fix typo in OpenGL debug runtime
Fix typo in comment
Remove dead lets also for very simple cases like "let var = constant".

Without removing such lets, later calls to unify_duplicate_lets() can
incorrectly reintroduce variables for constants: For example,

let var = 0
  0

will be turned into

let var = 0
  var
Update GLSL test program
Small fixes to handling of Load/Store nodes and kernel loops
Merge branch 'master' into opengl

Conflicts:
	src/CodeGen.cpp
Merge remote-tracking branch 'origin/master' into opengl
Fix typo
Initialize buffer_t's passed to the OpenGL backend with the correct
min/extent information using create_buffer_t() intrinsic.
Create OpenGL context on OSX.