Clean up Surface creation

Use different constructors for heap allocated vs fixed address surfaces