core: ArrayType and PointerType transformations now preserve const and volatile

This fixes #798

The transformations between ArrayType and PointerType slightly differs:

* PointerType - the transformation will keep the const and volatile on the type that the pointer points to, because
	it is more likely that the user just wants to make a pointer to the original type including all it properties.
	So typeing * on a const int16t will result in a "pointer to an int16t"

* ArrayType - The const and volatile will be lifted to the wrapping ArrayType.
	So typeing [ on a const int16t will result in "a const array of int16t" and not "a array of const int16t"