Extract StartupArguments interface out of FlowApplication

Make the engine take StartupArguments in init() instead of
FlowApplication, so that the engine can be easily launched by a
different launcher.