AddressSpaceInfoManager.addAddressSpace: store initial values as well

The interface was changed; now the address space struct is created
only in AddressSpaceInfoManager, it not passed as an argument.
AddressSpaceInfoManager: added accessor generator functions for program allocation argument
AddressSpaceInfoManager: added a 'fixed' state to ensure proper use of the instance
AddressSpaceInfoManager: keep track of value address spaces (and indices in the structs)
AddressSpaceInfoManager: use cast instead of dyn_cast where appropriate; use more accurate return types in get*-functions
AddressSpaceInfoManager.replaceUsesOfOriginalVariables: implemented

Also added function getValueReplacement that is used by
replaceUsesOfOriginalVariables.
Fully disable AnalysisUsage
getProgramAllocations: added a function for blockBuilder
AddressSpaceInfoManager: keep track of kernel arguments, not just their types
AddressSpaceInfoManager.getArgumentLimits: added a function for retrieving argument bounds

All other limit field functions were made private. The return types
(and intermediate casts giving those types) might be wrong (untested).