Delay saving children until parents are ready

Relational databases store the foreign key on the
child. If the parent of a child is new, that
record must be created first before the child can
be saved, as the child needs to know the parent's
primary key.

The DS.RESTAdapter now observes new parents of
dependent children, delaying their committal until
the parent has been created.
Allow sideloading records while in flight

In some circumstances, a record may need to have its data sideloaded
while it is still in flight.

For example, when creating a parent and child in the same commit, the
child may have updated data for the parent that should be inserted into
the store. In the case of DS.RESTAdapter, the parent will still be in
flight despite having been saved first, as it will be waiting on the
child to declare the relationship change between them clean.
Add hook for preserving dirty children on load

This is specifically needed for the REST adapter to ensure that dirty
children are preserved when new parent data comes back from the server.
Because the children are responsible for saving the relationship, the
parent record on the server won't yet know about the children. If the
children are dirty, it means they will be persisted to the server on
their transaction's next commit, at which point the server will then
know about them.