glsl: Make accessor functions for ir_variable::interface_type.

In a future patch, this will allow us to enforce invariants when the
interface type is updated.
UPSTREAM! glsl: Add an ir_variable::max_ifc_array_access field.

For interface blocks that contain arrays, this field will contain the
maximum element of each contained array that is accessed by the
shader.  This is a first step toward supporting unsized arrays in
interface blocks.

TODO:
- Make use of is_interface_instance()
- compute_max_ifc_array_access_size should go away.  It should be effectively
  this->is_interface_instance() ? this->interface_type->length : 0.
glsl: Update ir_variable::max_ifc_array_access properly.

This patch adds an implementation of
ir_dereference_record::update_max_array_access(), which ensures that
ir_variable::max_ifc_array_access is properly updated to reflect the
shader's use of arrays appearing within interface blocks.
!UPSTREAM: glsl/linker: Modify array_sizing_visitor to handle interface blocks.

Fixes piglit tests
"spec/glsl-1.50/linker/interface-blocks-unsized-array-mismatch" and
"spec/glsl-1.50/linker/interface-blocks-unsized-array-gs-mismatch"

TODO:
- Better comments
- Make use of is_interface_instance()
glsl: Sanity check max_ifc_array_access in ir_validate::visit(ir_variable *).
glsl: Update call_link_visitor to update max_ifc_array_access.

When multiple shaders of the same type access an interface block
containing an unsized array, we need to set the array size based on
the maximum array element accessed across all the shaders.  This is
similar to what we already do with unsized arrays occurring outside of
interface blocks.

Note: one corner case is not yet addressed by these patches: the case
where one compilation unit defines an interface block containing
unsized arrays and another compilation unit defines the same interface
block containing sized arrays.