App versions

Please review @ssorallen 
This reveals that `appVersion` is kinda busted. Instead of ducktyping an `App` into an `AppVersion`, the `AppVersion` class can expose a factory function called `AppVersion.fromApp(app)`, or something similar, that returns an `AppVersion` instance based on the `App`.