Changes in version 1.6.0                        

    o   Distinguish between scalars and length-1 vectors when
	saving/loading lists. This effectively unboxes all length-1
	vectors in a list, by default; this is probably the more
	reasonable expectation for other languages that have a concept
	of scalars. Users can override this by calling I() on elements
	that they want to keep as length-1 vectors, in the same manner
	as jsonlite.

    o   Streamlined the definition of the Rfc3339 class so that it
	behaves better with I().

    o   Normalize paths to resolve ~ prior to calling C++ code.

    o   Open HDF5 files in read-only mode to avoid permission-related
	problems for readObject()-dispatched functions.

    o   Store numbers at maximum precision when saving lists in the
	JSON format via saveObject().

    o   Added registerValidateObjectSatisfiesInterface() and
	registerValidateObjectDerivedFrom(), to allow developers to
	declare that custom subclasses satisfy an interface or have an
	inheritance relationship, respectively.

    o   Updated validateDirectory() so that it works with a directory
	of objects saved via saveObject(). Objects saved under the old
	regime (i.e., stageObject()) are auto-detected but can also be
	explicitly validated by setting legacy=FALSE.

    o   Added a data.frame method for saveObject(), to avoid fallback
	to the list method.

                        Changes in version 1.4.0                        

    o   Added the saveObject and readObject functions, which comply
	with the newly formalized takane specifications for each
	object's on-disk representation. This enables greater
	consistency across language frameworks (e.g., Python) by using
	a common library for enforcing the specification.  It also
	eliminates the need for a separate metadata file, simplifying
	the user experience and the expectations on extension
	developers.

    o   Added a dedicated validateObject function, which uses the
	takane libary to validate each object's files. This allows
	users to easily check if a set of files is compliant with the
	specification, e.g., when modifying parts of the object outside
	of saveObject.

    o   Soft-deprecation of the stageObject and loadObject functions.
	These use legacy representations that do not comply with the
	tightened takane specifications.