DVC repro is reproducing unchanged stages
Hey guys, I noticed that DVC repro reproduces unnecessary stages (version 0.9.7 from pip): 

```bash
# Initialize GIT and DVC repository
git init
dvc init
git add .dvc

# Create example folder
mkdir example
cd example

# Create hello.txt
dvc run -o hello.txt 'yes "Hello" | head -10 > hello.txt'
## Using 'hello.txt.dvc' as a stage file
## Reproducing 'hello.txt.dvc':
## 	yes "Hello" | head -10 > hello.txt

# Create world.txt
dvc run -o world.txt 'yes "World" | head -10 > world.txt'
## Using 'world.txt.dvc' as a stage file
## Reproducing 'world.txt.dvc':
## 	yes "World" | head -10 > world.txt

# Merge into hello_world.txt
dvc run -d hello.txt -d world.txt -o hello_world.txt 'paste hello.txt world.txt > hello_world.txt'
## Using 'hello_world.txt.dvc' as a stage file
## Reproducing 'hello_world.txt.dvc':
## 	paste hello.txt world.txt > hello_world.txt

dvc status
## (No changes)

dvc repro hello_world.txt.dvc
## Reproducing 'hello.txt.dvc':
## 	yes "Hello" | head -10 > hello.txt
## Reproducing 'world.txt.dvc':
## 	yes "World" | head -10 > world.txt
```

Is this expected behavior?
diff --git a/dvc/stage.py b/dvc/stage.py
index d5a926e5f..d1f658526 100644
--- a/dvc/stage.py
+++ b/dvc/stage.py
@@ -91,10 +91,14 @@ class Stage(object):
         self.project.logger.debug(msg.format(self.relpath, self.md5, md5))
         return True
 
+    @property
+    def is_callback(self):
+        return not self.is_data_source and len(self.deps) == 0
+
     def changed(self):
         ret = False
 
-        if not self.is_data_source and len(self.deps) == 0:
+        if self.is_callback:
             ret = True
 
         for entry in itertools.chain(self.outs, self.deps):
@@ -268,7 +272,7 @@ class Stage(object):
         ret.update(self._status(self.deps, 'deps'))
         ret.update(self._status(self.outs, 'outs'))
 
-        if ret or self.changed_md5():
+        if ret or self.changed_md5() or self.is_callback:
             return {self.relpath: ret}
 
         return {}
['dvc/stage.py']