Audit refactor

- make first  class audit model
- use promise flow rather than manual deferreds