New parameter string parsing implementation

Rewrote our parameter string parsing to match the Rack implementation and added unit tests to verify the implementation
Given that leftKeyRange never varies and you don’t access it more than once, why not just change this to 

```leftKey = [key substringWithRange:[leftKeyResult rangeAtIndex:1]];```