Bug with .only and DictField with digit keys

Hi,
It seems there's a bug with ValueDict and numeric keys.
The first commit shows the problem (it's a regression test).

It triggers the following exception:
```
Traceback (most recent call last):
  File "/home/lraucy/mongoengine/tests/queryset/queryset.py", line 3380, in test_dictfield_key_looks_like_a_digit
    self.assertEqual(MyDoc.objects.only('test__47').get().test['47'], 1)
  File "mongoengine/queryset/base.py", line 646, in only
    return self.fields(True, **fields)
  File "mongoengine/queryset/base.py", line 701, in fields
    fields = queryset._fields_to_dbfields(fields)
  File "mongoengine/queryset/base.py", line 1348, in _fields_to_dbfields
    document._lookup_field(field.split('.')))
  File "mongoengine/queryset/base.py", line 1347, in <genexpr>
    field = ".".join(f.db_field for f in
AttributeError: 'str' object has no attribute 'db_field'
```

The second commit is an attempt to correct the problem, but I'm not sure it's correct.

- I had to import ListField directly in the method `_lookup_field()`, probably because of a circular import problem.

- I don't understand the second test in the previous `if` statement:
```
if field_name.isdigit() and hasattr(field, 'field'):
```
Why  if `hasattr(field, 'field')`? Is it a way to test if `field` is a ComplexBaseField?
I changed it to what seemed the more logical to me, `hasattr(field, ListField)`. Not sure it's the correct thing to do though.