Allow more drastic external configuration

In Vagrantfile we had a `settings` variable with some directives we used
to configure the virtual machine, the problem was that to support new
directives, we first had to add them to that variable. This commit fixes
that by using callback functions instead of the `settings` variable to
configure the vm.

Usage:

Users of the vm can now override settings easily by creating a
`Vagrantfile.local` file with a `configure_extra` function that does the
additional configuration the user needs.

For example, to change the hostname of the machine do:
1. Create `Vagrantfile.local` in the same directory of `Vagrantfile`
file.
2. Define a `configure_extra` function:
```
def configure_extra(config)
  config.vm.hostname = "myhostname"
end
```

In order skip the default configuration completely do:
1. Create `Vagrantfile.local` in the same directory of `Vagrantfile`
file.
2. Define a `configure_extra` function:
```
def configure(config)
  # Configure your vm here...
end
```