Fix optional app and required app.user and app.group.

From the spec "app" is optional. I made it a pointer to avoid the validation of an empty field. This will affect applications using this package but this is usually the way go json handle empty json and I didn't find a better way.

Also user and group are defined as required so I added a validation.
@philips 
With the pointer and omitempty: on Unmarshal of a json without "app" it's ok and App will be a nil pointer. On Marshal it will create an "app": null json object and on unmarshal it will create a nil pointer. So Ok.

Without the pointer but with omitempty: on Unmarshal of a json without "app" it's ok as assertValid is not executed as no app is unmarshaled. On Marshal it will fail as assertValid will find an empty struct and verify that Exec is not empty. Removing the assertValid on the various Marshal functions it will create an "app": { "exec": null ...} json object that on Unmarshal will fail the validation as it will create an empty struct and run assertValid on it.

I added a test to verify this.

So the pointer seems to be the right fix. Without omitempty it will create a working but unclean json with "app": null. So I also added omitempty to create e clean json without "app" if App is a nil pointer.

I noticed that this applies also to the other optional values (it will create "labels": null, "dependencies": null and so on). For example: 
```
{"acKind":"ImageManifest","acVersion":"0.1.0","name":"example.com/fedora","app":{"exec":null,"eventHandlers":null,"user":"","group":"","environment":null,"mountPoints":null,"ports":null,"isolators":null},"annotations":null,"dependencies":null,"pathWhitelist":null}
```

So, if it's ok for you, I will create a new PR to add omitempty also to the other optional fields.

Thanks!