Refactor location, filename, and klabel attributes

**please review**
It the field is called `filename`, then it can and should be a `File`. In this case, it seems to describe an origin that is not necessarily a file. Then it should be renamed to `origin`, and be of an appropriate abstract type. I propose:
```
interface Origin {
  String toString(); // for the sake of having a human-readable description
}
class OriginFile extends Origin {
  File filename;
}
class OriginSystemCommand extends Origin {
 ...
}
```