Implemented custom locations

In theory this enables non-string parsing but it is not yet tested. Also
locations are now passed to semantic actions.