Module Owl_computation_engine

This functor takes a device as its input, then it generates the computation graph module without flattening the module hierarchy.

This functor takes an engine as its input, flattens all its embedded modules into the same level. Therefore the generated module has all the functions sit at the top level, then can be passed to other functors like Algodiff.