Modify  TachyonWorker Heartbeat sleeping to ScheduledExecutorService 

TachyonWorker's heartbeat thread is sleeping several milliseconds . 
JDK API ScheduledExecutorService's scheduleAtFixedRate method running a task after initial delay and subsequently with the given period. It's more fit for the heartbeat task .
And a TODO : split heartbeat thread into another class.
thanks 
If you look at the code for the scheduled executor (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/concurrent/ScheduledThreadPoolExecutor.java#ScheduledThreadPoolExecutor.schedule%28java.util.concurrent.Callable%2Clong%2Cjava.util.concurrent.TimeUnit%29) you see that the two methods are really the same.  Fixed rate will just schedule again where as schedule will only do it one time.  The following code will keep the behavior dynamic (matching master) while using the executor


```scala
val se = executor
val maxDelay = config.delay
val task = () => {
  val start = System.nanoTime()
  heartbeat()
  val end = System.nanoTime()
  val total = TimeUnit.NANOS.toMillis(end - start)
  se.schedule(task, maxDelay - total, TimeUnit. MILLISECONDS)
}
se.schedule(task, maxDelay, TimeUnit. MILLISECONDS)
```