Add stability options.

The following three things are guaranteed to be consistent:
   - aidl_interface stability: "vintf"
   - @VintfStability
   - Interface is marked as a 'vintf' interface at runtime

The benefit of this is at build time, we can check to make sure that
all 'stability: "vintf"' interfaces are frozen at release time.

Also: vintf => structured. By making sure this is true, we can make sure
usage of 'vintf' interfaces are compiled using aidl_interface and are
therefore subjected to stability checks. Without this check, an
interface may claim to be 'vintf' stability but actually be compiled
with the 'old' build system ('aidl:') and have no stability checks.
Also, notice these concepts of "structured" and "stability" are
fundamentally different. "structured" refers to the subset of the AIDL
language that is used while "stability" refers to a promise that a
specific API will be kept stable.

In the future, for APEX interfaces, we have two options:
- re-use 'vintf' classes for interfaces in APEXes
- create a new class similar to 'vintf' for APEX interfaces

Test: ./runtests.sh
Test: manually create an @VintfStability interface
Bug: 138467287
Change-Id: Ie1d01d8e868a28e219ef901e80a6268663e94536
14 files changed