Change the Manifest constructor to contain (Data [Length]) instead of Shape sh
The reason for this change is that we can generate much better code,
especially in loops where we don't have to copy the shape array for each
loop.
This is a rather big commit because I've had to add a lot of class constraints
because of the change to Manifest.