text: Title: Incorrect status reported for incomplete logs
  Body: In latest master branch, if a MIP log is incomplete (i.e. cut off with no termination message for whatever reason), we might report optimal status incorrectly. For example:
  
  ```
  Variable types: 23522 continuous, 2343 integer (0 binary)
  
  Root barrier log...
  
  Barrier solved model in 50 iterations and 72.71 seconds (53.24 work units)
  Optimal objective -1.76339641e+08
  
  Solved with barrier
  
  Root relaxation: objective -1.763396e+08, 104343 iterations, 108.23 seconds (79.42 work units)
  
      Nodes    |    Current Node    |     Objective Bounds      |     Work
   Expl Unexpl |  Obj  Depth IntInf | Incumbent    BestBd   Gap | It/Node Time
  ```
  
  here we get 'OPTIMAL' status from `ContinuousParser`, but no termination message from `NodeLogParser`.
  
  grblogtoolsv1 would give an 'incomplete log' warning in this situation (and report unknown status? I'm not sure).
  
  We should check for this with some custom logic for Status and Runtime, something like:
  
  - If the model is continuous, we can get Runtime and Status from ContinuousParser
  - If the model is (a) a MIP or (b) a continuous model solved as a MIP, we should ignore Runtime and Status from ContinuousParser
      - (a) We can check using model type in `SingleLogParser`
      - (b) Look for the message `Solving as a MIP` in header or presolve
  - If TerminationParser reports runtime or status, it should take precedence (this already happens)