Some refactoring and new Ball extension methods
More work on snookers required