[feature] generic layout destroy
Refactor destroy API for layouts so that we can solve a long standing ownership issue with complex layouts. Putting the destroy operator inside the implementation-specific ops allows us to call a generic destroyer on embedded layouts. Note that this introduce a ownership policy for pad & reshape layouts that take ownership of the targeted layout at creation time. Related to #55.