lock around read operations in graph

Writes and reads will fail with ErrBusy if there's
concurrent reads or writes, respectively. It is
not sufficient to only lock around writes.
gograph: Use RWMutex to allow concurrent readers
gograph: allow Walk() reentrance

Hold the read lock while reading the child graph,
then walk over the children without any lock, in
order to avoid deadlock.
Merge pull request #2565 from danielnorberg/master

lock around read operations in graph