ebooks now are published when ZIP extension isn't loaded

easybook checks if ZIP extension is loaded. If not, it tries to
create the compressed ePub files with the 'zip' console command.

This commit fixes issue #62
Fixed the previous commit

Some old versions of 'zip' command don't define the '--version' option
Minor tweaks to epub templates to avoid validation errors
reported by HTML validation tools
Fixed internal link generation for epub books

Clicking on a link pointing to another chapter of the same book
now works as expected.
Book contents can now be defined in Twig + Markdown

This is an experimental feature that I'm still refining. Therefore,
there is no documented yet.
Improved renderString() method used to quick Twig parsing

This method nox adds 'book' and 'edition' global variables.
This means that you can now parse any Twig string as if it
were a book template.
Composer is now available in travis workers
Fixed `publish` command to respect `--no-interaction` option
as reported in issue #69

When there is an error with any of the arguments passed to the `publish` command
(the book doesn't exist, the edition doesn't exist, etc.) **easybook** tries to
recover from the error and it allows the user to type in another book/edition
(up to 5 attempts). This behavior improves usability, but it must also comply
with the `-no-interaction` command.

After the changes introduced in this commit, this is the new behavior of the `publish` command:

---

**Command:**

`./book publish inexistent-book inexistent-edition`

**Result:**

```
 ERROR  The given 'inexistent-book' slug doesn't match any book in
 /Users/javier/sf/easybook/doc/ directory

 Please, type the slug of the book (e.g. the-origin-of-species)
 >

 (up to 5 attempts)

```

---

**Command:**

`./book publish inexistent-book inexistent-edition --no-interaction`

**Result:**

```
[RuntimeException]
  ERROR: The directory of the book cannot be found.
   Check that '/Users/javier/sf/easybook/doc' directory
   has a folder named as the book slug ('inexistent-book')
```

---

**Command:**

`./book publish this-book-exists inexistent-edition`

**Result:**

```
 ERROR  The 'inexistent-edition' edition isn't defined for 'this-book-exists' book

 Check that /Users/javier/sf/easybook/doc/this-book-exists/config.yml file
 defines a 'inexistent-edition' edition under the editions option.

 Please, type the name of the edition to be published:
 >

 (up to 5 attempts)
```

---

**Command:**

`./book publish this-book-exists inexistent-edition --no-interaction`

**Result:**

```
[RuntimeException]
  ERROR: The 'inexistent-edition' edition isn't defined for
  'this-book-exists' book.
```
Refactored the book:new command by introducing a new BookGenerator object.
Merge pull request #72 from hhamon/refactoring

Refactored the book:new command by introducing a new BookGenerator object
Added Twig namespaces support.

This commit doesn't affect the final users in any way, but it greatly
simplifies the code and it (slightly) improves performace.
Improved unit tests

easybook no longer uses OS temp dir (obtained with sys_get_temp_dir()).
Now it uses the app/Cache/ directory.
Minor tweak on Twig loader
Tweaked the hierarchy of the template paths passed to the loader
Added unit tests for `--no-interaction` mode of `publish` command
Latest GeSHi composer package supports class autoloading
Introduced a cache for code highlighting

Book editions can now set the `highlight_cache` option to cache
any highlighted code listing. By default this cache is disabled
because it's only useful for complex/long books that are
regenerated regularly.

Benchmarks are very promising: publishing a 700-page PDF book with
thousands of highlighted code lines went from 60 seconds to 4 seconds.
Internal improvements for ePub publisher.

  * The book contents directory name now includes a random part, to avoid collisions.
  * The Process component has been set to 2.1.1 version in composer.json, as the
    latest version doesn't execute the `zip` command correctly.
  * Reorganized some methods to improve code quality and readability.
Moved the version number in its own final getVersion() method.
Added a version global constant.