Create schema API

This is helpful for external libraries planning on writing clients.  We
also add some unittests for coverage.

Change-Id: I8b2974d08bc3a1f8f8555ad840ba1d81aaba6261
Signed-off-by: Paul Belanger <paul.belanger@polybeacon.com>