Use types to compute value of has_ref attribute

Previously you had to write:
```python
instance_prop = Instance(SomePlotObject, has_ref=True)
```
Now just write:
```python
instance_prop = Instance(SomePlotObject)
```
`has_ref` is now a attribute on `Property` and computed based on properties' type, which boils down to whether the type has an `Instance` or not. It is possible this will give false positives (embedded value with no refs in properties, which, I think, doesn't currently happen), but this doesn't influence correctness and shouldn't affect speed by any measurable value.

I wanted this to be a bigger PR that also fixes serialization/deserialization of embedded objects, so that we could remove special case `vm_serialize` and `vm_props`, and `finalize`, etc., and in general cleanup this area, because serialization and deserialization aren't symmetric right now. However, I will submit another one when this is merged.