Use nanoTime rather than currentTimeMillis in ReferenceQueue.remove()

Some other side effects of this change:
 - we no longer make a time lookup when we don't need to
 - we time out after 'n' milliseconds, not 'n+1' milliseconds
 - we duplicate code from Thread.join(). I opened http://b/5053948 to dedup this.

Bug: http://b/5050245
Change-Id: I20375119cfa06be559b6aa5c209375b3d3a541f9
2 files changed