Make PortUtil a singleton and increase test coverage

Having a class with only static utility methods is bad style anyway:
  - It looks like procedural programming (kind of global functions
    inside pseudo namespaces).
  - How do you mock static functions without dirty tricks if you want to
    test another class which utilises PortUtil?
Add test case testCannotGetAnyPort() -> increase line coverage to 100%
Throw exception for illegal port numbers

- Also refactor corresponding test cases
- Improve Javadoc (clarify that we are dealing with *local* ports)
Refactor PortUtilTest from Java to Spock/Groovy