Remove use of expensive maps in enum adapters.

Since enums now have direct access to their tagvia `getValue()`, alter the generic bounds to faciliate directly accessing.

For mapping the tag value back to an instance, use a subset of AOSP's SparseArray. This is an abstraction on a binary tree that will yield a significant reduction in memory by avoiding boxing and the overhead of wrapper objects. While not providing an O(1) lookup, the common case (hundreds or less of elements) provides no significant performance overhead.

@swankjesse @danrice-square