Add a volatility flag to CopyB nodes.

This requires to actually compute volatility in a number of places.
Therefore, this also adds some helper functions to do that.
Change the interface of get_alias_relation to take types instead of modes.

Code using get_alias_relation is converted by calling get_type_for_mode at
the appropriate locations.

This is in preparation for optimizations involving CopyB, which needs this
additional flexibility.
Remove #define for non-existent function irn_get_type.
Make alias analysis more exact.

Instead of the maximum of the two type sizes, use the size of the type of
numerically smaller pointer to check whether two pointers with offsets
alias.
Add an optimization for Load-after-CopyB.

If a Load reads from a location written to by a previous CopyB, we can use the
equivalent memory location in the CopyB's source buffer for further
optimizations (e.g. Load-after-Store).

In addition, if said CopyB source buffer is constant (e.g. an initializer),
we may directly replace the Load's pointer value with the equivalent memory
location in the initializer.
C99 cleanup.
Enable parallelize_mem to understand CopyB.
Add code to eliminate dead CopyB nodes.

Like a Store, a non-volatile CopyB whose destination is never read can be
removed.
Implement elimination of unnecessary Sync edges.

This removes all predecessors from Syncs which are reachable through a path
beginning at another predecessor.