I idly wonder if this could be something like `P<T> { ptr: Box<Option<T>> }`, which would allow for

```rust
fn inplace_map(&mut self, f: |T| -> T) {
    *self.ptr = Some(f(self.ptr.take_unwrap()))
}
```

The `Option` would be entirely private, and so we could guarantee that an externally-usable `P` was never `None` (i.e. only use it for in-place operations, with the `Some` being replaced). However, the memory/time cost of the extra `Option`, and the uncertainity of the future representation of the ast (e.g. being in arenas may make in-place mapping pointless/undesirable).