Add JSONEncodedType with enforced type checking

Add abstract base class for JSONEncoded properties which: 1. Does type
checking to make sure we're serializing what we really expect
2. Ensures that default value of the field matches default value of
that type, so we have consistent interface. This patch creates two child
classes JSONEncodedDict and JSONEncodedList and updates SA models
correspondingly.

Change-Id: I528ac64e998e9a874feb16709d7617feb4b09c8a
Closes-Bug: #1270146
Merge "Add JSONEncodedType with enforced type checking"