Re-write of lazy table reflection/generation.

I did not realize that ''Table'' objects and tables are completely
exclusive: you can have either one and not the other. (You can, in fact,
start with either and derive the other.)

The procedure is now as follows:
- Attempt to load a ''Table'' object from MetaData cache.
- If it does not exist in the cache, derive a description of the table
  structure from the JSON Schema object. This description is a ''Table''
  object.
- Ensure an actual database table matching the description in ''Table'' exists
  in the database by creating it if it does not exist. No attempt is made to
  ALTER TABLE to match the description because it is assumed such cases are
  bugs -- EventLogging should be the only thing creating tables.
- Return ''Table'' object.

Plus:
- Unit test.
- Type check to capsule_uuid() to ensure datetime input fails loudly.
- Minor comment / formatting touch-ups

Change-Id: I51c7ef2e35e57d0414e3e3a2426ba3153efbf738