Take out palindrome generation logic from PalindromeGenerator to PalindromeEngine

Since there are many ways to generate palindromes from an array of chars, the palindrome
generation logic has been moved to its own class: PalindromeEngine. PalindromeGenerator uses
this engine to generate palindromes from strings, only after the string passes each Validator.

This approach makes possible to change the palindrome generation algorithm just by modifying
PalindromeEngine or creating a new class that responds to #generate.

Changes in this commit make possible the use of this new PalindromeEngine. Also specs where
modified to expect an array of palindromes instead of just one string.
Add PalindromeException

These changes include adding PalindromeException, a Exception meant to be raised when
a string can't be used to build palindromes.

Also, other parts of the code have changed to expect this PalindromeException and react
to it.