PyAssimp optimize: load Armadillo: 33.8s -> 6.7s

Test file: Armadillo.ply (Stanford Armadillo)

Python testing code:

```Python
import pyassimp as assimp
import cProfile as prof

def testdae():
  print("importing dae model")
  model = assimp.load("Armadillo.dae")
  print(str(model))

def testply():
  print("importing ply model")
  model = assimp.load("Armadillo.ply")
  print(str(model))
  
if __name__ == '__main__':
  print("==== Testing assimp. ====")
  prof.run('testdae()',sort='time')
  prof.run('testply()',sort='time')
```

Note:
 Model format did not have much effect on the timing information ( +-0.5s ) (Surprise!)

Loading times before changes:
  
  Armadillo.dae - 33.336s
  Armadillo.ply - 33.862s
Changes:

1)
added _init_face() function
which initializes aiFace structure as per regular _init()
It is much faster to have tailored init functions (and much cleaner!).

Loading times after changes:
  Armadillo.dae - 6.7s
  Armadillo.ply - 6.77s

To conclude:

Medium-size models are important test cases.

c_ data type array initialization with _init was taking up 23 seconds of computing time!

Double check your algorithms next time.


Other interesting tidbits:
Among many properties in the assimp structures mBitangents in aiMesh has no related mNumBitangents (Surprise!)

Using dir() is pretty bad practice.

I would recommend rethinking the approach to assimp in python, because rebuilding a whole interface to a massive tree dynamically is very slow. Leaving the C interface names is really not that bad as it is camelCase. Many python libs leave the same C names in the apis - PySide for example.

I will be making my own interface to assimp, because pyAssimp is too slow for my needs :) If you guys agree to doing a massive change in PyAssimp, I might fix the current code instead.