[core] Add early stages of capability negotiation

Still *very* unstable, thus why I'm adding it off master