Support @nullable(heap) for recursive types

@nullable(heap=true) marks a parcelable field to be held in a heap
allocated wrapper like unique_ptr<T> in C++ and Box<T> in Rust.

This enables recursive parcelable types like following:

  parcelable Recursive {
    @nullable(heap=true) Recursive r;
  }

Note `r` is represented in Option<Box<Recursive>> in Rust because Box<T>
should hold a value always.

Bug: 188690695
Test: aidl_integration_test
Change-Id: Ic9b209da73c1395785c078aeecd34fda74e42e7d
52 files changed