hashids rewrite scala-way

1. No vars
2. Throwing exception if alphabet contains duplicates or less then 16 chars
3. Throwing exception if decodeHex provided with non HEX string
4. No seps in constructor. Why would you need those?
5. No double check in decode function
6. Implicit encode/decode functions named in one word: hashid/unhashid