[NEEDS REVIEW] Refactor Postmaster unsolicited check

**Todo before merge**
- [x] confirm working with phone example 
- [x] confirm logic to determine unsolicited checks out with Tessel team
- [ ] remove logs

**Overview**
I found the unsolicited check to be very, very confusing to follow. This is the beginning of my attempt to refactor it.

The line in question is: 

```
if ((self.callback === null || (!self.started && starts.indexOf(data) === -1)) && !(!self.started && self.alternate && self.alternate[2] && self.alternate[0].filter(function(partialStart) {
        if (self.debug) {
          console.log([data], [partialStart], data.indexOf(partialStart));
        }
        return data.indexOf(partialStart) === -1;
      }).length != self.alternate[0].length)) {
      //  ^check that we're not using soft logic either...
      self.emit('unsolicited', data); 
}
```

First I factored out various checks into single functions. Then I combine these functions in a function that returns true/ false. 

```
function isUnsolicited() {
      if(!hasCallback()) {
        return true;
      }
      if(!hasStarted() && !useSoftContains && !isDataInStartArrayStrict()) {
        return true;
      }
      if(!hasStarted() && useSoftContains && !isDataInStartArraySoft()) {
        return true;
      }
      return false;
}
```

The initial logic was very confusing, but I think I've captured the essence. There is a lot of logging that I will remove once I'm sure the logic is correct. @johnnyman727 can you take a look and confirm the logic is correct?