Refactor Target.java and add tons of tests

Make Target an interface implemented by SrvTarget and ExplicitTarget.
This allows us to not collapse multiple master endpoints into one
target, which will enable better CLI output later on.

E.g. `helios jobs --master master1 --master master2 --json` outputs

```
{
  master1: {A},
  master2: {B}
}
```

instead of

```
{
  A+B
}
```
I think it would be better to return an instance of `ExplicitTarget` instead of `Target`. It's more flexible because callers can then access methods specific to `ExplicitTarget` without having to cast. You'd still be able to assign to `Target` references, so would lose any functionality.