Unpickle job data lazily. This fixes issue #294.
Move seemingly general purpose decorator into class scope, use and delete.

Also, reduce repeat attribute declarations, at the cost of a
requirement that decorated functions appear in the right order.
Just use a regular private method along with 'property'.
Change AssertionError to proper TypeError.
Allow two-way setting of job data properties.

As a side-effect, this also enables us to lazily load the data.
Merge branch 'malthe-lazy-job-data-unpickle'
Update CHANGES.
Replace substring in Pickle string differently.

Pickle uses a new format since Python 3, which is incompatible with
Python 2.  This problem now pops up because the replacement string had
a different length, so we broke the pickle protocol with this test.