Cleanup permalink generation

Fix permalink generation to not contain various smells. See verbose description in the last commit in this PR.
If spree requires ruby 2.0+ then you could use keyword arguments here to unwrap the options, eg:

```ruby
def initialize(length: 9, prefix:) 
  @length = length
  @prefix  = prefix
end
```