Simplify asVersion()

By leveraging `get_object_vars($this)`, the static property arrays are no longer necessary.  The catch is that all exportable properties in child classes must not be `private`, or must be handled in a custom `_asVersion()` method.

When tests were added or modified, only minimal happy-paths were taken.  More robust testing is still needed for complete coverage.  The exception is `StatementTest` which had it's `testAsVersion()` updated to actually test functionality.  It's now the most robust test of `AsVersionTrait::asVersion()` in the whole suite.

I welcome your feedback and look forward to helping out and working with you on this and your other libraries.
Based on my read of `empty`'s docs it seems like this might be a little dangerous since it is checking falsey values as opposed to `! isset`. For instance, specifically in Context, the revision could be specified as `"0"` which appears to be false but is valid in the object itself. It is hard to expect a false value for the other strings, but in general we want to be *very* careful with differentiating undefined + false from just undefined. I think this would be better as `! isset` than `empty`, if the user supplies something not valid for the LRS as a value then the LRS should reject it.