Add nullable information to property info
Add _info_list for properties for validation

Now before an attempt is made to save an object,
the provided arguments are checked against the
overall property list. If any items are left unset,
then rather than attempt the upload, an error is
printed:

```
required arguments: name, ...
```
Support AnnotationLink creation via proxy_to_instance

Since it isn't possible to know at code-generation time
what type is going to be passed, we needed a helper method
(`omero.proxy_to_instance`) which is the default for all
abstract classes.