Feature/reservations and purchases

## Requests válidos para reservar

### Función que requiere selección de asientos

Request: POST /api/reservations

Body:
```json
{"email": "test@test.com", "show_id": 5900, "seats": ["m-3"]}
```

200 OK:

```json
{"id":55,"seats":["b-3"],"share_url":"http://phoneticket.dev/reservations/55", ... }
```

Errores "esperados":

422 Invalid Entity (eg. el asiento está tomado):

```json
{"errors":{"seats":["no es válido"]},"id":null,"seats":["b-3"] ... }
```

Errores no "esperados":

400 Bad Request (un asiento que no existe)

```json
"errors":{"seats":["Alguno de los asientos enviados no existe"]}}
```

404 Not Found (usuario o show inexistente)

```json
{"errors":{"show":"Inexistente"}}
```

```json
{"errors":{"user":"Inexistente"}}
```